0.介绍
LiveData,同属于JetPack构建集合,根据文档描述LiveData是一个可观察的数据持有者类。与常规observable不同,LiveData是生命周期感知的,这意味着它尊重其他应用程序组件的生命周期,例如Activity,Fragment或Service。此感知确保LiveData仅更新处于活动生命周期状态的应用程序组件观察者。
优势(以下摘自google文档,google翻译了一下)
(1)确保您的UI符合您的数据状态
LiveData遵循观察者模式。生命周期状态更改时,LiveData会通知Observer对象。您可以合并代码以更新这些Observer对象中的UI。每次应用程序数据更改时,您的观察者都可以在每次更改时更新UI,而不是更新UI。
(2)没有内存泄漏
观察者绑定到Lifecycle对象并在其相关生命周期被破坏后自行清理。
由于停止活动而没有崩溃
如果观察者的生命周期处于非活动状态(例如,在后端堆栈中的活动的情况下),则它不会接收任何LiveData事件。
(3)不再需要手动生命周期处理
UI组件只是观察相关数据,不会停止或恢复观察。 LiveData自动管理所有这些,因为它在观察时意识到相关的生命周期状态变化。
(4)始终保持最新数据
如果生命周期变为非活动状态,则会在再次变为活动状态时接收最新数据。例如,后台活动在返回前台后立即收到最新数据。
(5)适当的配置更改
如果由于配置更改(例如设备轮换)而重新创建活动或片段,则会立即接收最新的可用数据。
(6)共享资源
您可以使用单例模式扩展LiveData对象以包装系统服务,以便可以在应用程序中共享它们。 LiveData对象连接到系统服务一次,然后任何需要该资源的观察者都可以只观看LiveData对象。
1.使用
class MainActivity : AppCompatActivity() {
val curName: MutableLiveData<String> by lazy {
MutableLiveData<String>()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
curName.observe(this, Observer<String> {
println("value is $it")
})
curName.value="old value"
}
}
使用很简单,当MutableLiveData对象的value发生改变时会出发Observer