一,概述
1,LiveData是状态订阅组件,是粘性的,而非事件订阅组件(可以没有事件,但不能没有状态)。所谓的状态,即UI状态,同一时刻只存在一种,且是最新状态,过期的状态应该被遗弃。事件,则是生产者创建的事件,需一一消费,不能被遗弃。
2,Android页面承载组件Activity,本是存在多种生命状态(Create,Start,Resume,Pause,Stop,Destroy),UI状态的发布,取决当前Activity(或者Fragment)是否已经Resume(即或已经前台可见)。
3,UI事件的发布只能在View线程(可简单理解为主线程吧),LiveData提供了异步监听机制,可方便UI事件回调。
4,LiveData通过装饰器模式,内部监听了生命周期组件状态变化,能自动反注册Observer,避免了内存泄漏。
基于以上前提,LiveData组件在MVVM中,采用观察者模式,内部监听Activity的生命周期,实现一套很好的数据监听流组件。特别是与ViewModel结合使用,业务逻辑清晰明了。
二,实例
以下实例,是基本的LiveData搭配ViewModel的使用例子,Observer#onChange回调,只有在当前Activity处于Resume时,才会得到调用,