Andoird 中 LiveEventBus 的使用——用 LiveEventBus 替代 RxBus
autoClear(false);
二、使用方法
1、发送消息
在需要发送消息的地方
1)、
//发送一条即时消息
LiveEventBus.get("key").post("value");
2)、
//发送一条延时消息 3 秒跳转
LiveEventBus.get("key").postDelay("value",3000);
2、接受消息,注册一个订阅
在需要接受消息的地方
LiveEventBus.get("key",String.class).observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
Log.i(TAG,s);
}
});
当发送 key 这条消息的时候,就会实时接收到消息 ,前提页面没有销毁,因为具有生命周期感知能力
介绍
LiveData 是 Android Architecture Components 提出的框架。LiveData 是一个可以被观察的数据持有类,它可以感知并遵循 Activity、Fragment 或 Service 等组件的生命周期。正是由于 LiveData 对组件生命周期可感知特点,因此可以做到仅在组件处于生命周期的激活状态时才更新 UI 数据。
LiveData 需要一个观察者对象,一般是 Observer 类的具体实现。当观察者的生命周期处于 STARTED 或 RESUMED 状态时,LiveData 会通知观察者数据变化;在观察者处于其他状态时,即使 LiveData 的数据变化了,也不会通知。
LiveData 的优点
UI 和实时数据保持一致,因为 LiveData 采用的是观察者模式,这样一来就可以在数据发生改变时获得通知,更新 UI。
避免内
存泄漏,观察者被绑定到组件的生命周期上,当被绑定的组件销毁(destroy)时,观察者会立刻自动清理自身的数据。
不会再产生由于 Activity 处于 stop 状态而引起的崩溃,例如:当 Activity 处于后台状态时,是不会收到 LiveData 的任何事件的。
不需要再解决生命周期带来的问题,LiveData 可以感知被绑定的组件的生命周期,只有在活跃状态才会通知数据变化。
实时数据刷新,当组件处于活跃状态或者从不活跃状态到活跃状态时总是能收到最新的数据。
解决 Configuration Change 问题,在屏幕发生旋转或者被回收再次启动,立刻就能收到最新的数据。
谈一谈 Android Architecture Components
Android Architecture Components 的核心是 Lifecycle、LiveData、ViewModel 以及 Room,通过它可以非常优雅的让数据与界面进行交互,并做一些持久化的操作,高度解耦,自动管理生命周期,而且不用担心内存泄漏的问题。
Room
一个强大的 SQLite 对象映射库。
ViewModel
一类对象,它用于为 UI 组件提供数据,在设备配置发生变更时依旧可以存活。
LiveData 一个可感知生命周期、可被观察的数据容器,它可以存储数据,还会在数据发生改变时进行提醒。
Lifecycle
包含 LifeCycleOwer 和 LifecycleObserver,分别是生命周期所有者和生命周期感知者。
Android Architecture Components 的特点
数据驱动型编程
变化的永远是数据,界面无需更改。
感知生命周期,防止内存泄漏
高度解耦
数据,界面高度分离。
数据持久化
数据、ViewModel 不与 UI 的生命周期挂钩,不会因为界面的重建而销毁。
重点:为什么使用 LiveData 构建数据通信总线 LiveDataBus
使用 LiveData 的理由
LiveData 具有的这种可观察性和生命周期感知的能力,使其非常适合作为 Android 通信总线的基础构件。
使用者不用显示调用反注册方法。
由于 LiveData 具有生命周期感知能力,所以 LiveDataBus 只需要调用注册回调方法,而不需要显示的调用反注册方法。这样带来的好处不仅可以编写更少的代码,而且可以完全杜绝其他通信总线类框架(如 EventBus、RxBus)忘记调用反注册所带来的内存泄漏的风险。
为什么要用 LiveDataBus 替代 EventBus 和 RxBus
LiveDataBus 的实现及其简单,相对 EventBus 复杂的实现,LiveDataBus 只需要一个类就可以实现。
LiveDataBus 可以减小 APK 包的大小,由于 LiveDataBus 只依赖 Android 官方 Android Architecture Components 组件的 LiveData,没有其他依赖,本身实现只有一个类。作为比较,EventBus JAR 包大小为 57kb,RxBus 依赖 RxJava 和 RxAndroid,其中 RxJava2 包大小 2.2MB,RxJava1 包大小 1.1MB,RxAndroid 包大小 9kb。使用 LiveDataBus 可以大大减小 APK 包的大小。
LiveDataBus 依赖方支持更好,LiveDataBus 只依赖 Android 官方 Android Architecture Components 组件的 LiveData,相比 RxBus 依赖的 RxJava 和 RxAndroid,依赖方支持更好。
LiveDataBus 具有生命周期感知,LiveDataBus 具有生命周期感知,在 Android 系统中使用调用者不需要调用反注册,相比 EventBus 和 RxBus 使用更为方便,并且没有内存泄漏风险。
**LiveDataBus 的设计和架构
LiveDataBus 的组成**
评论