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

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

所以,RxBus凭借区区30代码,就敢挑战EventBus“江湖老大”的地位。...当观察者的生命周期处于STARTED或RESUMED状态时,LiveData会通知观察者数据变化;在观察者处于其他状态时,即使LiveData的数据变化了,也不会通知。...LiveData的优点 UI和实时数据保持一致,因为LiveData采用的是观察者模式,这样一来就可以在数据发生改变时获得通知,更新UI。...而每个新的订阅者,其version都是-1,LiveData一旦设置过其version是大于-1的(每次LiveData设置值都会使其version加1),这样就会导致LiveDataBus每注册一个新的订阅者...也为-1,也就是说,每一个新注册的观察者,其version为-1;当LiveData设置这个ObserverWrapper的时候,如果LiveData的version大于ObserverWrapper的

2.3K30

Android Architecture Component之LiveData解析

今天就给大家来解析一下其中的 LiveData 是如何工作的。 LiveData 表示的是动态的数据,比如我们从网络上获取的数据,或者从数据库中获取的数据等,都可以用 LiveData 来概括。...LiveData Observer LiveData 应用的主要是观察者模式,因为数据是多变的,所以肯定需要观察者来观察。而观察者和数据源建立连接就是通过 observe 方法来实现的。...这样,在 LiveData 里就可以获取到观察者的生命周期了。...当观察者的生命周期可用时,LiveData 会把数据发送给观察者,而当观察者生命周期不可用的时候,即 mOwner.getLifecycle().getCurrentState() == DESTROYED...Footer LiveData 讲完了,再说一点,我们在实际的使用中用的都是 LiveData 的实现类 MutableLiveData 。

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

Android Architecture Component之LiveData原理解析

今天就给大家来解析一下其中的 LiveData 是如何工作的。 LiveData 表示的是动态的数据,比如我们从网络上获取的数据,或者从数据库中获取的数据等,都可以用 LiveData 来概括。...Observer LiveData 应用的主要是观察者模式,因为数据是多变的,所以肯定需要观察者来观察。而观察者和数据源建立连接就是通过 observe 方法来实现的。...这样,在 LiveData 里就可以获取到观察者的生命周期了。...当观察者的生命周期可用时,LiveData 会把数据发送给观察者,而当观察者生命周期不可用的时候,即 mOwner.getLifecycle().getCurrentState() == DESTROYED...Footer LiveData 讲完了,再说一点,我们在实际的使用中用的都是 LiveData 的实现类 MutableLiveData 。

84660

事件总线方案实践

[image摘自网络] 具体使用可以看demo代码,demo开源地址 02.RxBus使用原理 RxBus不是一个库,而是一个文件,实现只有短短30代码。...- 如果 ObserverWrapper 的 mLastVersion 小于 LiveData 的 mVersion,那么就会执行的 onChange() 方法去通知观察者数据已更新。...而 ObserverWrapper.mLastVersion 的默认值是 -1, LiveData 只要更新过数据,mVersion 就肯定会大于 -1,所以订阅者会马上收到订阅之前发布的最新消息!!...代码如下所示:/\*\* \* 在给定的观察者的生命周期内将给定的观察者添加到观察者列表所有者。 \* 事件是在主线程上分派的。如果LiveData已经有数据集合,它将被传递给观察者。...这意味着给定的观察者将接收所有事件,并且永远不会 被自动删除。 您应该手动调用{@link #removeObserver(Observer)}来停止 观察这LiveData

1.9K30

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

OnBackPressedDispatcher:处理回退事件的新姿势[8] 二、其他: 1、AppStartup:轻量级初始化框架[9] 2、DataStore:新一代键值对存储方案 3、Room:ORM 数据库访问框架...; LiveData#observeForever(Observer) 永久注册: LiveData 会一直持有观察者的引用,只要数据更新就会回调,因此这种方式必须在合适的时机手动移除观察者。...LiveData 实现原理分析 2.1 注册观察者的执行过程 LiveData 支持使用 observe() 或 observeForever() 两种方式注册观察者,其内部会分别包装为 2 种包装对象...super T> observer) { super(observer); mOwner = owner; } // 宿主的生命周期大于等于可见状态(STARTED...而观察者的持有的初始版本号是 -1,因此当注册新观察者并且正好宿主的生命周期是大于等于可见状态(STARTED)时,就会尝试分发数据,这就是数据重放。

3.5K10

Jetpack之LiveData详解

主要有如下两个作用: 实时刷新数据 防止内存泄漏 LiveData 采用的是观察者模式,当 LiveData 保存的数据发生变化时就会通知观察者观察者接收到通知后可以进行 UI 数据刷新或者其他操作。...() 创建观察者对象:new Observer() 绑定观察者对象:LiveData.observe 更新 LiveData 数据:LiveData.setValue 详细介绍 1、Api 介绍 LiveData...容器的数据 protected void onActive():当活跃的观察者对象数量大于 0 时调用,即有活跃的观察者对象时调用 protected void onInactive():当活跃的观察者对象数量等于...的使用 前面 Hello LiveData 简单展示了 LiveData 的使用 LiveData 除了依赖生命周期对象实现观察者的自动管理外,还可以添加忽略生命周期的观察者, 使用 observeForever...除了使用库里提供的 MutableLiveData 和 MediatorLiveData 外我们还可以根据实际场景继承 LiveData自定义我们自己的 LiveData,比如我们需要展示最新一条消息的

1.6K20

Android Architecture Component之LiveData解析HeaderLiveDataFooter

今天就给大家来解析一下其中的 LiveData 是如何工作的。 LiveData 表示的是动态的数据,比如我们从网络上获取的数据,或者从数据库中获取的数据等,都可以用 LiveData 来概括。...LiveData Observer LiveData 应用的主要是观察者模式,因为数据是多变的,所以肯定需要观察者来观察。而观察者和数据源建立连接就是通过 observe 方法来实现的。...这样,在 LiveData 里就可以获取到观察者的生命周期了。...当观察者的生命周期可用时,LiveData 会把数据发送给观察者,而当观察者生命周期不可用的时候,即 mOwner.getLifecycle().getCurrentState() == DESTROYED...Footer LiveData 讲完了,再说一点,我们在实际的使用中用的都是 LiveData 的实现类 MutableLiveData 。

57730

LiveData详细分析

LiveData需要一个观察者对象,一般是Observer类的具体实现。当观察者的生命周期处于STARTED或RESUMED状态时,LiveData会通知观察者数据变化。...通过 observe()方法连接观察者LiveData。observe()方法需要携带一个LifecycleOwner类。这样就可以让观察者订阅LiveData中的数据,实现实时更新。...的 observe(),当数据更新后,LiveData 会通知它的所有活跃的观察者。...7.3 看看mObservers.putIfAbsent操作 关于observe源码中这一代码ObserverWrapper existing = mObservers.putIfAbsent(observer...每个新的订阅者,其version都是-1,LiveData一旦设置过其version是大于-1的(每次LiveData设置值都会使其version加1),这样就会导致LiveDataBus每注册一个新的订阅者

2.9K00

是时候更新手里的武器了—Jetpack架构组件简析

这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。 ” LiveData 是一种可观察的数据存储器类。等等,这个介绍好像似曾相识?...不会因 Activity 停止而导致崩溃如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件。...自动判断生命周期并回调方法如果观察者的生命周期处于 STARTED 或 RESUMED状态,则 LiveData 会认为该观察者处于活跃状态,就会调用onActive方法,否则,如果 LiveData...当Fragment这个观察者生命周期发生变化时,LiveData就会移除这个观察者,不再发送消息,所以也就避免崩溃问题。...当然实际使用起来也确实要方便很多,比如liveData结合,就能在数据查询后进行自动UI更新。 既然Room这么优秀,那就用起来吧。Room的接入主要有三大点:DataBase、Entity、Dao。

2.9K20

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

这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。...当我们的观察者生命周期处于 STARTD 或者 RESUMED 状态,LiveData 就会认为当前观察者处于活跃状态,此时就会触发相应的更新通知,而非活跃的观察者自然不会收到通知。...---- 如果我们自己要实现一个 LiveData ,其内部维护着一个数据,并且要保证这个数据在更新时,观察者可以收到通知,并且要在页面活跃状态才。此时,就有如下几个问题: 数据怎么维护?...() 去分发本次数据,然后会去轮训当前的观察者列表,然后判断观察者是否是活跃状态,即是否是 onStrat() - onPause() 之间,如果是并且当前观察者的版本号小于 LiveData 维护的版本号...问题很简单,在上面我们已经说过了,当我们调用 observe() 添加数据观察者时,内部实际会被包装为 LifecycleBoundObserver,从而添加到 lifecycle 的生命周期观察者列表

1.3K20

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

三个步骤就定义了使用LiveData的方式,从步骤可以看出,使用了观察者模式,当LiveData对象持有数据发生变化,会通知对它订阅的所有处于活跃状态的订阅者。...创建LiveData对象 LiveData可以包装任何数据,包括集合对象。LiveData通常存储在ViewModel中,并通过getter方法获得。...将LiveData解耦,不和特定的Activity或Fragment绑定在一起。 创建 观察LiveData 的对象 有了数据源之后,总需要有观察者来观察数据源,不然数据源就失去了存在的意义。...这里通过button的点击来给LiveData设置值,也可以网络或者本地数据库获取数据方式来设置值。 扩展 LiveData 可以通过下面的栗子来看看如何扩展LiveData。...当其中一个源数据发生变化是,都会回调订阅MediatorLiveData的观察者的onChanged()方法。例如我们在实际开发中,我们的数据源要么来自服务器,要么来自本地数据库

2.9K30

【译】LiveData with Coroutines and Flow

例如,我们可以添加一个持有业务逻辑的领域层(你的应用程序实际做什么)和一个数据层。 此外,我们了解到表现层可以被分成不同的组件,承担不同的责任。...将可观察的数据暴露给观察者。通常与ViewModels的工作方式有关。 这是一个在Android社区相当成熟的惯例,但你会发现有一些文章有不同意见。...在配置变化中保存下来,如旋转、地域变化、窗口大小调整、黑暗模式切换等。 有一个非常简单的生命周期。它有一个单一的生命周期回调,onCleared,一旦它的生命周期所有者完成,就会被调用。...ViewModel被设计为使用观察者模式来使用。 它不应该有对视图的引用。 它将数据暴露给观察者,但不知道这些观察者是什么。你可以使用LiveData来实现这一点。...().collect { emit(it) } } 但由于它有很多模板代码,所以我们添加了Flow.asLiveData()扩展函数,它可以在一中做同样的事情。

1.4K10

改造 Android 官方架构组件 ViewModel

963a9d146da7 前言 Android 官方架构组件在今年 5 月份 Google I/O 大会上被公布, 直到 11 月份一直都是测试版, 由于工作比较繁忙, 期间我只是看过类似的文章, 但没有在实际项目中使用过...LiveData 具有两个功能, 第一个功能是观察者模式, 在 Value 发生变化时通知之前注册的所有观察者, 第二功能是基于生命周期组件与 Activity 和 Fragment 等具有生命周期特性的组件绑定在一起...LiveData 与 RxJava 都是基于观察者模式, 功能上也有重合, Google 在官方文档上也明确表示, 如果你正在使用 RxJava, Agera 等类似功能的库, 只要你能正确的处理数据流的生命周期...于是我认真的研究了其源码, LiveData 具有两个功能, 通知观察者更新数据和根据生命周期停止和恢复之前的事件, 而 Rxjava 加上 RxLifecycle, RxJava 加上 AutoDispose...源码其实也就几个类, 经过了层层封装, 核心代码就在一个叫做 HolderFragment 的 Fragment 中, 在我看来 ViewModel 组件 的核心原理也就是 HolderFragment 中的一代码实现的

74610

Android面试题到处攒,一到面试就不知深浅忘个干净?快来看看这份超详细整理!

在MVVM中使用了LiveData,那么在需要更新View的时候,如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件。...主要思想就是用到了观察者模式思想,让观察者和被观察者解耦,同时还能感知到数据的变化,所以一般被用到ViewModel中,ViewModel负责触发数据的更新,更新会通知到LiveData,然后LiveData...自动判断生命周期并回调方法 如果观察者的生命周期处于 STARTED 或 RESUMED状态,则 LiveData 会认为该观察者处于活跃状态,就会调用onActive方法,否则,如果 LiveData...14、说说LiveData原理 说到原理,其实就是两个方法: 订阅方法,也就是observe方法。通过该方法把订阅者和被观察者关联起来,形成观察者模式。...阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万源码,万种实践。

1.5K20

【AAC 系列三】深入理解架构组件:LiveData

实际使用下来发现 LiveData 有几个特性: LiveData 的实现基于观察者模式; LiveData 跟 LifecycleOwner 绑定,能感知生命周期变化,并且只会在 LifecycleOwner...比如我们的数据来源有两个,一个数据库一个网络,这时候我们会有两个 DataSource,也就是两个 LiveData,这个时候我们可以使用 MediatorLiveData 来 merge 这两个 LiveData...Override public void onChanged(@Nullable final Integer integer) { } }); 4.4 LiveDataBus EventBus 基于观察者模式...知识点汇总 LiveData 的实现基于观察者模式; LiveData 跟 LifecycleOwner 绑定,能感知生命周期变化,并且只会在 LifecycleOwner 处于 Active 状态(STARTED...总结 LiveData 基于观察者模式,并且可以感知生命周期,这使得我们使用 LiveData 既可以享受观察者模式带来的隔离数据与 UI 等强大的解耦能力,还可以享受感知生命周期带来的巨大便利。

89420

360度无死角,Android Jetpack面试技巧大揭秘

问题: 详细说明LiveData和ViewModel的工作原理,并讨论在实际项目中如何解决常见的生命周期问题。...出发点: 这个问题涉及到Android应用中的数据响应式编程,考察面试者对LiveData和RxJava的理解,以及在实际应用中的合理选择。...参考简答: LiveData和Observable都是用于实现响应式编程的工具,但有一些关键区别: 生命周期感知: LiveData是生命周期感知的,它会在观察者(通常是UI组件)的生命周期内自动启动和停止...根据实际需求,选择使用LiveData还是Observable取决于应用的具体场景。对于需要与UI组件绑定的数据,以及对生命周期敏感的场景,LiveData是更好的选择。...Room数据库的性能优化 问题: 在使用Room数据库时,有哪些性能优化的手段可以提高数据库访问的效率? 出发点: 了解在实际项目中,如何通过一些技巧提高Room数据库的性能。

17810

项目架构三问—腾讯真题

优缺点 这种缺点还是比较明显的,主要表现就是我们的Activity太重了,经常一写就是几百上千了。...Model:数据模型,比如我们从数据库或者网络获取数据。View:视图,也就是我们的xml布局文件和Activity。Presenter:主持人,单独的类,只做调度工作。...Model:数据模型,比如我们从数据库或者网络获取数据。View:视图,也就是我们的xml布局文件和Activity。...在MVVM中使用了LiveData,那么在需要更新View的时候,如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件。...其实也就是我们常说的观察者模式,或者说订阅发布模式。 为什么说这个呢,因为MVVM的本质思想就是类似这种。

52610

Android技术栈(四)Android Jetpack MVVM 完全实践

在你的gradle.properties添加 android.databinding.enableV2=true 现在我们可以通过LiveData(实际上是MutableLiveData)将android.../Fragment被重建也能重新接收到LiveData保存的数据 //在组件DESTROYED时,LiveData会把它移出观察者列表 //当然你也可以不关联LifecycleOwner,让订阅一直保持...super S> onChanged) @MainThread public void removeSource(@NonNull LiveData toRemote) 通过查看源码,我们可以知道在有观察者时...LiveData#onActive会被回调,MediatorLiveData会在内部迭代,用observeForever订阅所有被合并进来的LiveData,这样就能接收所有LiveData的变化,在没有观察者时...(boolLiveData,bool->Boolean.toString(bool)); 上面只是一个演示,实际上可以执行更为复杂的逻辑,并且这种转换是惰性的,在没有激活态观察者时,这种转换不会发生.

3.8K01

Kotlin Flow响应式编程,StateFlow和SharedFlow

delay(1000) time++ } } } 运行程序看一看效果: 一开始的时候,界面上计时器每更新一次,同时控制台也会打印一日志...当然,我们这个例子非常简单,在实际项目中一个Flow可能又是由多个上游Flow合并而成的。在这种情况下,如果程序进入了后台,却仍有大量Flow依然处于活跃的状态,那么内存问题会变得更加严重。...实际上,StateFlow也有更加响应式的用法,借助stateIn函数,可以将其他的Flow转换成StateFlow。...响应式编程是一种发送者和观察者配合工作的编程模式,由发送者发出数据消息,观察者接收到了消息之后进行逻辑处理。 普通场景下,这种发送者和观察者的工作模式还是很好理解的。...但是,如果在观察者还没有开始工作的情况下,发送者就已经先将消息发出来了,稍后观察者才开始工作,那么此时观察者还应该收到刚才发出的那条消息吗? 不管你觉得是应该还是不应该,这都不重要。

41310
领券