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

(StateFlow & ShareFlow) VS (Flow & LiveData

theme: condensed-night-purple highlight: vs 在之前的Flow,collect函数浅析和仿Flow构建器创建数据流文章中我们探索了flow的简单使用及它的简单原理...类似于观察数据,数据更新,使用方接受最新数据是不是和LiveData很像。...确实像,但他比LiveData更强大~~ StateFlow 线程切换:相比于LiveData更新数据的操作只能在主线程进行,但是Flow可以通过flowOn来在不同的Dispatchers(线程分发器...,CoruntineContext的一种)上运行切换线程的操作更加方便 数据回溯:相比于LiveData自动管理version来决定是否通知Ovserve并且只能收到最新值的方式,Flow可通过构造函数配置...reply字段决定获取之前的几次数据更新 生命周期处理: 对于LiveData来说,通过观察调用observe函数的时候传入LifecycleOwner内部注册生命周期回调的方式相比;Flow的观察collect

97840

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

类似于观察数据,数据更新,使用方接受最新数据是不是和LiveData很像。...确实像,但他比LiveData更强大~~StateFlow线程切换:相比于LiveData更新数据的操作只能在主线程进行,但是Flow可以通过flowOn来在不同的Dispatchers(线程分发器,CoruntineContext...的一种)上运行切换线程的操作更加方便数据回溯:相比于LiveData自动管理version来决定是否通知Ovserve并且只能收到最新值的方式,Flow可通过构造函数配置reply字段决定获取之前的几次数据更新生命周期处理...: 对于LiveData来说,通过观察调用observe函数的时候传入LifecycleOwner内部注册生命周期回调的方式相比;Flow的观察collect函数需要在协程中调用也就是需要自动管理协程的生命周期

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

观察者模式 vs 发布订阅模式

本文公众号来源:柳树的絮叨叨 作者:柳树的絮叨叨 有一回面试,面试官问: 观察者模式,和发布订阅模式,有什么区别?...观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。...使用观察者模式,面向接口编程,实现松耦合。...观察者模式里面,changed()方法所在的实例对象,就是被观察者(Subject,或者叫Observable),它只需维护一套观察者(Observer)的集合,这些Observer实现相同的接口,Subject...总结 从表面上看: 观察者模式里,只有两个角色 —— 观察者 + 被观察者 而发布订阅模式里,却不仅仅只有发布者和订阅者两个角色,还有一个经常被我们忽略的 —— 经纪人Broker 往更深层次讲: 观察者和被观察者

52030

LiveData的前世今生

例如:一个值可以在没有观察者活动的情况下被设置,所以新的观察者会直接取代它。另外,从不同的线程设置值可能会导致竞赛条件,只产生一个对观察者的调用。...确保你的用户界面与你的数据状态相匹配:LiveData遵循观察者模式,当生命周期状态改变时,LiveData会通知观察者对象。你可以整合你的代码来更新这些观察者对象中的UI。...LiveData对象与系统服务连接一次,然后任何需要该资源的观察者就可以观察LiveData对象。欲了解更多信息,请参见扩展LiveData。...The recommended solution 你可以在LiveData类本身中找到处理多个观察者的标准方法,那就是将原始观察者包裹起来。...其次,每个观察者都会以自己的所有者身份注册到父级LiveData

1.1K10

带你了解LiveData重放污染的前世今生

例如:一个值可以在没有观察者活动的情况下被设置,所以新的观察者会直接取代它。另外,从不同的线程设置值可能会导致竞赛条件,只产生一个对观察者的调用。...确保你的用户界面与你的数据状态相匹配:LiveData遵循观察者模式,当生命周期状态改变时,LiveData会通知观察者对象。你可以整合你的代码来更新这些观察者对象中的UI。...LiveData对象与系统服务连接一次,然后任何需要该资源的观察者就可以观察LiveData对象。欲了解更多信息,请参见扩展LiveData。...The recommended solution 你可以在LiveData类本身中找到处理多个观察者的标准方法,那就是将原始观察者包裹起来。...其次,每个观察者都会以自己的所有者身份注册到父级LiveData

1.2K10

观察者设计模式 Vs 事件委托(java)

https://blog.csdn.net/gdutxiaoxu/article/details/51824769 观察者设计模式 Vs 事件委托 标签: 设计模式 java 事件的委托...观察者模式的优缺点 如何看待观察者模式的缺点 事件的委托 什么是观察者模式 简单来说,当有多个观察者想同时观察同一个主题对象的时候,当主题对象的 状态发生变化,观察者能够回调自身的方法去更新自己 观察者模式的类...UML图 image.png 实现步骤 要定义一个观察者接口 观察者实现观察者接口 要有一个被通知者接口,里面有addObserver(Observer observer), removeObserver...Android系统内容提供者 ,内容观察者就采用了这种观察者模式 RecyClerView和ListView的 Adapter就采用了观察者模式,关于RecyclerView的Adapter是怎样实现观察者模式的...---- 观察者模式的优缺点 优点 很好地解耦了通知者与观察者观察者不需要了解通知者内部是怎样实现的,方便于日后代码的修改,体现了 依赖倒转的原则。

1.3K30

LiveData精通指南:解锁其潜力

LiveData是一个可观察的数据持有者类,它可以在数据发生变化时通知观察者。...,我们将当前活动作为观察者,并在LiveData对象发生更改时更新数据。...LiveData的原理 LiveData的原理非常简单。它使用观察者模式来通知观察者数据发生了变化。当LiveData对象被观察时,它会将观察者添加到观察者列表中。...当LiveData对象发生变化时,它会通知观察者。为了避免内存泄漏,LiveData还需要与生命周期组件一起使用,以确保观察者只会在活动的生命周期内接收数据更新。...当Activity或Fragment处于STARTED或RESUMED状态时,LiveData会将观察者添加到观察者列表中,并开始向观察者发送数据更新通知。

20210

LiveData三问—阿里真题

主要思想就是用到了观察者模式思想,让观察者和被观察者解耦,同时还能感知到数据的变化,所以一般被用到ViewModel中,ViewModel负责触发数据的更新,更新会通知到LiveData,然后LiveData...LiveData作为一种观察者模式设计思想,常常被和Rxjava一起比较,观察者模式的最大好处就是事件发射的上游 和 接收事件的下游 互不干涉,大幅降低了互相持有的依赖关系所带来的强耦合性。...不会因 Activity 停止而导致崩溃 如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件。...自动判断生命周期并回调方法 如果观察者的生命周期处于 STARTED 或 RESUMED状态,则 LiveData 会认为该观察者处于活跃状态,就会调用onActive方法,否则,如果 LiveData...说说LiveData原理。 说到原理,其实就是两个方法: 订阅方法,也就是observe方法。通过该方法把订阅者和被观察者关联起来,形成观察者模式。

47930

LiveData 还有学习的必要吗?—— Jetpack 系列(2)

LiveData#observeForever(Observer) 永久注册: LiveData 会一直持有观察者的引用,只要数据更新就会回调,因此这种方式必须在合适的时机手动移除观察者。...LiveData 实现原理分析 2.1 注册观察者的执行过程 LiveData 支持使用 observe() 或 observeForever() 两种方式注册观察者,其内部会分别包装为 2 种包装对象...条件 2: 观察者的持有的版本号小于 LiveData 的版本号时。...,并且 LiveData 存在未分发到该观察者的数据(即观察者持有的版本号小于 LiveData 持有的版本号); 提示: observeForever() 虽然没有直接绑定生命周期宿主,但可以理解为绑定的生命周期是全局的...实现方法是在注册新观察者时,通过反射的手段将观察者持有的版本号(Observer#mLastVersion)同步为 LiveData 的版本号。缺点是使用反射,但确实能够解决多观察者问题。

3.5K10

Android Jetpack - LiveData

LiveData 概述 LiveData 是一个可观察数据包装类,与普通观察者不同,LiveData 具备生命周期感知能力,这意味着它遵循其它应用组件的生命周期(Activity、Fragment、Service...等),此感知能力确保了 LiveData 只更新处于生命周期活跃状态的组件的观察者 生命周期活跃状态的定义是这些组件正处于 STARTED 或 RESUMED 状态,LiveData 只会更新活跃状态的观察者...在生命周期销毁时会立即取消数据观察订阅 LiveData 的优势 确保 UI 和数据状态同步 LiveData 遵循观察者模式。...LiveData 对象连接到系统服务一次,然后任何需要该资源的观察者都可以只观看 LiveData 对象 使用 LiveData 使用 LiveData 的常规步骤如下,我们按照下面这些步骤写一个简单的例子...具体可以参考 Android Jetpack - Room 一文所提供的代码示例 转换 LiveData 您可能希望在将 LiveData 对象分派给观察者之前更改存储在 LiveData 对象中的值,

2K30

Android | LiveData 源码分析

了解 LiveData 如果观察者(Activity/Fragment) 的生命周期处于 STARTED 或者 RESUMED 状态,LiveData 就会认为是活跃状态。...LiveData 只会将数据更新给活跃的观察者。 在添加观察者的时候,可以传入 LifecycleOwner 。...有了这关系,当 Lifecycle 对象状态为 DESTORYED 时,便可以移除这个观察者。 使用 LIveData 具有以下优势: 确保界面符合数据状态:数据发生变化时,就会通知观察者。...:观察者接口 LiveData:发送已经添加观察的逻辑都在其中 ObserverWrapper :抽象的观察者包装类,提供了mLastVersion 和判断以及更新观察者是否活跃的方法 LifecycleBoundleObserver...如果观察者的生命周期处于 STARTED 或者 RESUMED 状态,LiveData 就会认为观察者处于活跃状态,我们可以通过重写 LiveData 来判断当前是否为活跃状态 class StockLiveData

98520

由浅入深,详解 LiveData 的那些事

这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。...当我们的观察者生命周期处于 STARTD 或者 RESUMED 状态,LiveData 就会认为当前观察者处于活跃状态,此时就会触发相应的更新通知,而非活跃的观察者自然不会收到通知。...) } 在调用 observe() 订阅 Livedata 数据更新时,这里相当于添加了一个观察者,方法内部会将我们传递的 LifecycleOwner 与 观察者 包装为一个具体的生命周期观察者 wrapper...() 去分发本次数据,然后会去轮训当前的观察者列表,然后判断观察者是否是活跃状态,即是否是 onStrat() - onPause() 之间,如果是并且当前观察者的版本号小于 LiveData 维护的版本号...而又因为这个观察者是新添加进去的,观察者持有的数据版本号是默认的,即-1,但是 LiveData 内部的数据版本号可不是啊!,所以自然触发了数据更新通知。

1.3K20

谷歌官方Android应用架构库——LiveData

vonInactive():当 LiveData 没有任何处于活动状态的观察者时该方法被调用。由于没有观察者在监听,所以没有理由保持与 LocationManager 的连接。...setValue():调用该方法更新 LiveData 实例的值,并将此变更通知给处于活动状态的观察者。...LiveData 的转换 有时候可能会需要在将 LiveData 发送到观察者之前改变它的值,或者需要更具另一个 LiveData 返回一个不同的 LiveData 实例。...信息,以便只有在观察者观察到 LiveData 的返回时才运算这些转换。...如果在调用时没有处于活动状态的观察者,在添加观察者之前不会进行任何运算。 该机制允许以较少的资源根据需要惰性运算来创建 LiveData

1.1K30

Jetpack之LiveData详解

主要有如下两个作用: 实时刷新数据 防止内存泄漏 LiveData 采用的是观察者模式,当 LiveData 保存的数据发生变化时就会通知观察者观察者接收到通知后可以进行 UI 数据刷新或者其他操作。...在给 LiveData 添加观察者对象的时候可以绑定一个具有生命周期的组件,当组件生命周期处于活跃状态(即 STARTED 、RESUMED 状态)时数据更新才会通知观察者,当组件被销毁时则会自动移除对应的观察者对象...() 创建观察者对象:new Observer() 绑定观察者对象:LiveData.observe 更新 LiveData 数据:LiveData.setValue 详细介绍 1、Api 介绍 LiveData...数据源,或者调度多个 LiveData 数据源决定向观察者发送那个 LiveData 的数据更新。...的使用 前面 Hello LiveData 简单展示了 LiveData 的使用 LiveData 除了依赖生命周期对象实现观察者的自动管理外,还可以添加忽略生命周期的观察者, 使用 observeForever

1.6K20

Android程序员该如何去手写事件通信方案LiveDataBus

LiveData具有以下优点: 1.能够保证数据和UI统一 这个和LiveData采用了观察者模式有关,LiveData是被观察者,当数据有变化时会通知观察者(UI)。...2.减少内存泄漏 这是因为LiveData能够感知到组件的生命周期,当组件处于DESTROYED状态时,观察者对象会被清除掉。...7.资源共享 通过继承LiveData类,然后将该类定义成单例模式,在该类封装监听一些系统属性变化,然后通知LiveData观察者,这个在继承LiveData中会看到具体的例子。...Observer接口就是观察者,其中定义了LiveData数据变化的回调方法onChanged()。...根据Fragment/Activity生命周期发生变化时,移除观察者或者通知观察者更新数据。 当调用LiveData的setValue()、postValue()方法后,通知观察者更新数据。

1.4K10

Android Jetpack架构组件(四)之LiveData

LiveData是一个持有数据的容器类,它持有的数据是可以被观察者订阅的,当数据发生变化时会通知观察者观察者可以是 Activity、Fragment、Service 等对象。...LiveData 具有感知观察者的生命周期能力,并且只有当观察者处于激活状态(STARTED、RESUMED)才会接收到数据更新的通知,在未激活时会自动解除注册观察者,以降低内存泄漏的风险。...因此,我们认为LiveData就是一个数据容器,它负责将数据包裹起来,使数据成为被观察者,当数据发生变化时,LiveData会通知观察者以便观察者做出响应。...从上述步骤可以看出,LiveData使用了观察者模式,观察者通常是UI控制器,如Activity或Fragment,而被观察者则是LiveData包谷的数据对象, 当LiveData对象持有数据发生变化...同时,LiveData仅更新处于活跃生命周期状态的应用组件观察者,也即是说LiveData并不会通知所有的观察者,它只会通知处于活跃状态的观察者,那么它是如何做到这一点的呢?

2.8K00

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券