首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android Jetpack架构组件(四)之LiveData

与常规观察类不同,LiveData 具有生命周期感知能力,这意味着它具有感知应用组件( Activity、Fragment 或 Service)生命周期能力,并且LiveData仅更新处于活跃生命周期状态应用组件观察...LiveData是一个持有数据容器类,它持有的数据是可以被观察订阅,当数据发生变化时会通知观察观察可以是 Activity、Fragment、Service 等对象。...从上述步骤可以看出,LiveData使用了观察模式,观察通常是UI控制器,Activity或Fragment,而被观察则是LiveData包谷数据对象, 当LiveData对象持有数据发生变化...,会通知对它订阅所有处于活跃状态订阅。...同时,LiveData仅更新处于活跃生命周期状态应用组件观察,也即是说LiveData并不会通知所有的观察,它只会通知处于活跃状态观察,那么它是如何做到这一点呢?

2.6K00

Android从零开始搭建MVVM架构(4)——LiveData

6.适应屏幕旋转数据保存 像屏幕旋转导致 activity 或 fragment重创建之后,Livedata 会立即通知一下相应观察。保证了数据不会丢失。...LiveData允许UI控制器Observer订阅更新。 当LiveData对象所保存数据发生变化时,UI会在响应中自动更新。...所以我们需要在一开始就设置好观察。 通常情况下,LiveData只在数据有变化时,给活跃Observer进行通知。 此行为一个例外是,Observer在从非活跃状态变为活跃状态时也会收到通知。...在建立观察关系之后,可以更新LiveData对象值,如以下示例所示,当用户点击按钮时向所有观察发出通知: mButton.setOnClickListener(new OnClickListener...)都会触发观察更新UI。

2.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

由浅入深,详解 LiveData 那些事

这种感知能力确保 LiveData 仅更新处于活跃生命周期状态应用组件观察。...当我们观察生命周期处于 STARTD 或者 RESUMED 状态,LiveData 就会认为当前观察处于活跃状态,此时就会触发相应更新通知,而非活跃观察自然不会收到通知。...,我们一般会先初始化一个 MutableLiveData 对象,然后对外暴漏 LiveData 对象,从而遵循开闭原则,外部调用只允许订阅观察观察数据更新,而不允许主动通知数据更新,当然这也是 LiveData...生命周期观察数组里,从而便于收到生命周期更新通知; 上述实现看似简单,但仔细思考就有个问题,如果观察此时处于活跃状态呢?...,并将新版本号赋值给这个观察; 相应,因为我们观察订阅了 lifecycle 生命周期更新,所以当生命周期由非活跃转为活跃状态时,我们就再去对比一下当前观察最新数据版本号与我们当前最新版本号是否一致

1.3K20

Jetpack:在数据变化时如何优雅更新Views数据

三个步骤就定义了使用LiveData方式,从步骤可以看出,使用了观察模式,当LiveData对象持有数据发生变化,会通知对它订阅所有处于活跃状态订阅。...而这些订阅通常是UI控制器,Activity或Fragment,以能在被通知时,自动去更新Views。 创建LiveData对象 LiveData可以包装任何数据,包括集合对象。...onActivite() 当有活跃状态订阅订阅LiveData时会回调该方法。意味着需要在这里监听数据变化。...setValue() 注意到value=price这里是调用了setValue(price)方法,通过该方法更新LiveData值,进而通知处于活跃状态订阅。...LiveData会认为订阅生命周期处于STARTED或RESUMED状态时,该订阅活跃。 那么如何使用StockLiveData呢?

2.9K30

【译】LiveData三连

❝老实说,LiveData是一个可观察数据持有。它让你应用程序中组件,通常是UI,能够观察LiveData对象变化。...❞ 关于这个LiveData新概念是,它具有生命周期意识,这意味着它尊重应用程序组件(Activity、Fragment)生命周期状态,并确保LiveData只在组件(观察)处于活跃生命周期状态时更新它...为了更好地理解何时使用这个新观察数据持有以及使用它优势,在这篇文章其余部分,我将回顾一些替代方案,以面对根据数据变化更新UI这一基本任务。...#3 — Using an event bus 另一种方法是,当我们必须根据数据变化更新用户界面时,使用基于事件机制(发布/订阅)(使用greenrobot EventBus演示)。...此外,实现基于事件机制库通常支持高级功能,交付线程和订阅优先级(人们也可以使用Android LocalBroadcast,而不需要第三方库)。

1.6K20

LiveData详细分析

LiveData需要一个观察对象,一般是Observer类具体实现。当观察生命周期处于STARTED或RESUMED状态时,LiveData会通知观察数据变化。...自动解除数据订阅 要想使用LiveData(或者这种有可被观察数据能力类)就必须配合实现了LifecycleOwner对象使用。在这种情况下,当对应生命周期对象DESTORY时,才能移除观察。...通过 observe()方法连接观察和LiveData。observe()方法需要携带一个LifecycleOwner类。这样就可以让观察订阅LiveData中数据,实现实时更新。...observe(),当数据更新后,LiveData 会通知它所有活跃观察。...与 RxJava 不同,LiveData 只会通知活跃观察,例如 Activity 位于 Destroyed 状态时是活跃,因此不会收到通知。

2.8K00

LiveData三问—阿里真题

这种感知能力确保 LiveData 仅更新处于活跃生命周期状态应用组件观察。 官方介绍如下,其实说比较清楚了,主要作用在两点: 数据存储器类。也就是一个用来存储数据类。 可观察。...主要思想就是用到了观察模式思想,让观察和被观察解耦,同时还能感知到数据变化,所以一般被用到ViewModel中,ViewModel负责触发数据更新更新会通知到LiveData,然后LiveData...不会因 Activity 停止而导致崩溃 如果观察生命周期处于非活跃状态(返回栈中 Activity),则它不会接收任何 LiveData 事件。...对象没有任何活跃观察时,会调用 onInactive()方法。...说到原理,其实就是两个方法: 订阅方法,也就是observe方法。通过该方法把订阅和被观察关联起来,形成观察模式。

47430

LiveData优势

这种感知能力确保LiveData 仅更新处于活跃生命周期状态应用组件观察。 应用组件观察可以很安全观察数据变化(绑定声明周期,自动绑定和移除),不用担心内存泄漏等问题。...当观察数据发生变化时,LiveData 会通知 [Observer]对象,实现被动更新,不需要主动去调用viewmodel获取数据。...不会发生内存泄漏 观察会绑定到 [Lifecycle],可以获取到应用组件声明周期,当销毁时自动取消订阅。...不会因 Activity 停止而导致崩溃 如果观察生命周期处于非活跃状态(返回栈中 Activity),则它不会接收任何 LiveData 事件(也是通过LifecycleOwner实现)...LiveData 对象连接到系统服务一次,然后需要相应资源任何观察只需观察 LiveData 对象

1.2K20

设计模式之订阅发布模式

在这些情况下,我们通常会使用设计模式来实现这种机制,其中订阅发布模式就是其中之一。订阅发布模式(Publish-Subscribe Pattern)是一种软件设计模式,用于实现对象松耦合。...本文将详细介绍订阅发布模式原理、应用场景、优缺点以及如何在程序中实现订阅发布模式。原理订阅发布模式本质是一种消息传递机制,也就是所谓“事件驱动”,它包括三个主要组成部分:发布订阅和消息。...其中,发布负责发布消息,订阅负责订阅感兴趣消息,而消息则是传递信息工具。在订阅发布模式中,发布订阅之间直接产生耦合关系,它们之间通过消息进行交互。...例如,一个网站可能需要发送新闻通知给所有订阅观察模式:订阅需要观察一个特定对象,以便当该对象发生变化时能够及时得到通知。例如,当数据模型发生变化时,视图层需要进行更新。...通过使用订阅发布模式,我们可以实现对象松耦合,并且提高代码扩展性和重用性。在程序中实现订阅发布模式方法有很多种,开发可以根据自己需求来选择合适实现方式。

1K30

阿里Android三面真题,想进阿里关于LiveData这三个问题你至少得答出来

这种感知能力确保 LiveData 仅更新处于活跃生命周期状态应用组件观察。 官方介绍如下,其实说比较清楚了,主要作用在两点: 数据存储器类。也就是一个用来存储数据类。 可观察。...主要思想就是用到了观察模式思想,让观察和被观察解耦,同时还能感知到数据变化,所以一般被用到ViewModel中,ViewModel负责触发数据更新更新会通知到LiveData,然后LiveData...不会因 Activity 停止而导致崩溃 如果观察生命周期处于非活跃状态(返回栈中 Activity),则它不会接收任何 LiveData 事件。...对象没有任何活跃观察时,会调用 onInactive()方法。...说到原理,其实就是两个方法: 订阅方法,也就是observe方法。通过该方法把订阅和被观察关联起来,形成观察模式。

57900

Android Jetpack - LiveData

等),此感知能力确保了 LiveData 只更新处于生命周期活跃状态组件观察 生命周期活跃状态定义是这些组件正处于 STARTED 或 RESUMED 状态,LiveData 只会更新活跃状态观察...,而已注册但处于非活跃状态观察不会被更新 我们可以在实现了 LifecycleOwner 接口对象中注册 observer,这种关联允许 observer 在与之相关 Lifecycle 对象处于...在生命周期销毁时会立即取消数据观察订阅 LiveData 优势 确保 UI 和数据状态同步 LiveData 遵循观察模式。...每次应用程序数据更改时,你观察都可以在每次更改时更新 UI,而不是更新 UI 没有内存泄露 观察绑定到 Lifecycle 对象,并在其相关生命周期被破坏后自行清理 不会因为活动停止而崩溃 如果观察生命周期处于非活动状态...在这种情况下观察被认为始终处于活动状态,因此始终会收到有关修改通知。

1.9K30

ROS2DDSQoS主题记录

---- eProsima 快速 RTPS eprosima Fast RTPS 是 RTPS(实时发布订阅)协议 C++ 实现,它通过对象管理组 (OMG) 联盟定义和维护不可靠传输( UDP)...可以为发布订阅、服务服务器和客户端指定 QoS 配置文件。QoS 配置文件可以独立应用于上述实体每个实例,但如果使用不同配置文件,它们可能会兼容,从而阻止消息传递。...可靠性 尽力而为:尝试提供样本,但如果网络健壮,可能会丢失它们。 可靠:保证样品送达,可多次重试。...耐用性 Transient local:发布负责为“后期加入”订阅保存样本。 Volatile:尝试保留样本。...为了让订阅收听发布主题,他们请求活跃度跟踪级别必须等于或低于发布提供跟踪级别,并且订阅设置直到被认为活跃时间必须大于时间由发布设置。 生命周期策略为消息保持有效时间建立了合同。

1.9K30

(StateFlow & ShareFlow) VS (Flow & LiveData)

时候执行这个扩展函数;但是这两个Flow不一样他们不依赖于外部调用(可配置稍后说明),他们是热流,他们发出数据会缓存起来当有订阅时候再通知订阅 StateFlow 和 SharedFlow是发出状态更新并向多个使用方发出值并且可以通过...api去开启: 1.viewModelScope:跟随ViewModel生命周期变化,当ViewModel观察组件销毁调用onClear时候自动取消协程,生命周期过长采取一般在对数据进行处理时候会使用...1.WhileSubscribed()当存在活跃订阅观察flow协程域没有被取消)时flow函数也会活跃(执行flow函数),可配置最后一个订阅取消订阅超时时间进行取消flow函数运行也可以配置数据过期时间...(超过一段时间将会从缓冲中移除) 2.SharingStarted.Eagerly 立即启动提供方(flow函数立马运行),使用 SharingStarted.Lazily 可在第一个订阅出现后开始共享数据...通过 subscriptionCount 属性,获取活跃状态收集器数量。 通过 resetReplayCache 函数清空数据缓存,供您在不想回放已向数据流发送最新信息情况下使用。

97040

(StateFlow & ShareFlow) VS (Flow & LiveData)来看业务适合哪个?

时候执行这个扩展函数;但是这两个Flow不一样他们不依赖于外部调用(可配置稍后说明),他们是热流,他们发出数据会缓存起来当有订阅时候再通知订阅StateFlow 和 SharedFlow是发出状态更新并向多个使用方发出值并且可以通过...:跟随ViewModel生命周期变化,当ViewModel观察组件销毁调用onClear时候自动取消协程,生命周期过长采取一般在对数据进行处理时候会使用2.lifecycleScope: 此范围内启动协程会在...1.WhileSubscribed()当存在活跃订阅观察flow协程域没有被取消)时flow函数也会活跃(执行flow函数),可配置最后一个订阅取消订阅超时时间进行取消flow函数运行也可以配置数据过期时间...(超过一段时间将会从缓冲中移除)2.SharingStarted.Eagerly 立即启动提供方(flow函数立马运行),使用 SharingStarted.Lazily 可在第一个订阅出现后开始共享数据...通过 subscriptionCount 属性,获取活跃状态收集器数量。通过 resetReplayCache 函数清空数据缓存,供您在不想回放已向数据流发送最新信息情况下使用。

54340

深入掌握设计模式:提升软件工程艺术

我们将深入研究简单工厂、工厂方法和抽象工厂模式,并讨论它们适用场景。 3. 观察模式 (Observer Pattern) 观察模式建立了对象之间松耦合关系,用于事件处理和消息传递。...我们将探讨观察模式实现方式以及如何应用于实际场景, GUI 开发和发布-订阅系统。 4....适配器模式 (Adapter Pattern) 适配器模式用于解决接口兼容问题,它允许不同接口对象协同工作。我们将讨论对象适配器和类适配器区别,并示例说明如何在代码中应用适配器模式。 5....观察模式 (Observer Pattern) 观察模式建立了对象之间一对多依赖关系,当一个对象状态发生变化时,所有依赖它对象都会得到通知并自动更新。...这在以下情况下非常有用: GUI 开发:用于处理用户界面组件事件和交互。 发布-订阅系统:用于实现消息传递和事件处理。 股票市场报价:多个观察关注股票价格变化。

15120

Carson带你学Android:图文详解RxJava背压策略

具体如下: 对于异步订阅关系,存在 被观察发送事件速度 与观察接收事件速度 匹配情况 发送 & 接收事件速度 = 单位时间内 发送&接收事件数量 大多数情况,主要是 被观察发送事件速度 >...观察接收事件速度 1.2 问题 被观察 发送事件速度太快,而观察 来不及接收所有事件,从而导致观察无法及时响应 / 处理所有发送过来事件问题,最终导致缓存区溢出、事件丢失 & OOM ,...与 观察接收事件速度 匹配场景 具体场景就取决于 该事件类型,:网络请求,那么具体场景:有很多网络请求需要执行,但执行者执行速度没那么快,此时就需要使用背压策略来进行控制。...,所以下文中讲解主要是异步订阅关系场景,即 被观察 & 观察 工作在不同线程中 但由于在同步订阅关系场景也可能出现流速匹配问题,所以在讲解异步情况后,会稍微讲解一下同步情况,以方便对比 5.1...下图 = 当缓存区存满时(128个事件)溢出报错原理图 代码演示1:观察接收事件情况下,被观察继续发送事件 & 存放到缓存区;再按需取出 /** * 步骤1:设置变量 *

1.2K10

Android消息总线演进之路:用LiveDataBus替代RxBus、EventBus

这个主题对象在自身状态变化时,会通知所有订阅对象,使它们能够自动更新自己状态。 ? RxBus出现 RxBus不是一个库,而是一个文件,实现只有短短30行代码。...来创建一个Subject对象(PublishSubject只有被订阅后才会把接收到事件立刻发送给订阅),在需要接收事件地方,订阅该Subject对象,之后如果Subject对象接收到事件,则会发射给该订阅...完成了订阅,在需要发送事件地方将事件发送给之前被订阅Subject对象,则此时Subject对象作为订阅接收事件,然后会立刻将事件转发给订阅该Subject对象订阅,以便订阅处理相应事件,到这里就完成了事件发送与处理...正是由于LiveData对组件生命周期感知特点,因此可以做到仅在组件处于生命周期激活状态时才更新UI数据。 LiveData需要一个观察对象,一般是Observer类具体实现。...LiveData优点 UI和实时数据保持一致,因为LiveData采用观察模式,这样一来就可以在数据发生改变时获得通知,更新UI。

2.2K30

Android RxJava:一文带你全面了解 背压策略

对于异步订阅关系,存在 被观察发送事件速度 与观察接收事件速度 匹配情况 发送 & 接收事件速度 = 单位时间内 发送&接收事件数量 大多数情况,主要是 被观察发送事件速度 >...与 观察接收事件速度 匹配场景 具体场景就取决于 该事件类型,:网络请求,那么具体场景:有很多网络请求需要执行,但执行者执行速度没那么快,此时就需要使用背压策略来进行控制。...代码演示1:观察接收事件情况下,被观察继续发送事件 & 存放到缓存区;再按需取出 /** * 步骤1:设置变量 */ private static final String...代码演示2:观察接收事件情况下,被观察继续发送事件至超出缓存区大小(128) Flowable.create(new FlowableOnSubscribe() {...面向对象:针对缓存区 作用:当缓存区大小存满、被观察仍然继续发送下1个事件时,该如何处理策略方式 缓存区大小存满、溢出 = 发送事件速度 > 接收事件速度 结果 = 发送 & 接收事件匹配结果

1.8K20

阿里IM技术分享(九):深度揭密RocketMQ在钉钉IM系统中应用实践

而 ToB 场景下:聊天记录是非常重要内容,钉钉为保证用户消息丢失,提供了多端同步和消息云端存储能力,用户任意换端都能查看完整聊天记录。...对于第 3)点:要求消息队列高可用性方面不仅包括系统可用性,也包括数据可用性,要求写入消息队列时消息丢失(钉钉 IM 对消息保证级别是一条都不丢)。...此外,如何在系统异常情况下做到消息最终一致?Processor 收到上游投递消息时,会尝试对消息做入库处理。即使入库失败,依然会将消息投给同步服务,将消息下发,保证实时消息收发正常。...钉钉能够支持十几万人超大群,超大群活跃对服务端和客户端都会带来很大冲击,而实际上用户需求只需实现秒级更新。针对以上场景:可以利用 RocketMQ 定时消息能力实现分布式定时任务。...▲ 用 RocketMQ 实现分布式定时任务流程原理我们抽象了一个分布式定时任务组件,提供了很多其他实时性可达秒级功能,万人群群状态更新、消息扩展更新都接入了此组件。

68120

了解 StoreKit 2 新功能

在这种情况下,交易稍后才会到达,只有在父母批准后才会到达。应该观察 Transaction.updates 流来处理这种类型交易。我们必须在应用程序启动时开始监视此流,以确保不会错过任何交易。...cancel() } } StoreKit 2 提供了一种轻松获取所有活跃订阅和已购买产品方法。...Transaction 类型上 currentEntitlements 属性列出了所有活跃订阅和未退款产品。...通过主动监视 currentEntitlements 属性,我们消除了还原购买需求,因为 currentEntitlements 始终包含最新活跃订阅和非消耗性购买列表,即使它们是在另一台设备上购买也是如此...主要内容包括项目配置、构建 Paywall 功能、显示产品列表、购买产品、处理交易状态、监控交易更新和获取活跃订阅与购买。

22110
领券