一般放在ViewModel中,LiveData内部实现了观察Activity的生命周期的一些观察者,一些逻辑,在LiveData的加持下,ViewModel也实现了观察Activity生命周期的能力。在Activity未激活状态,向LiveData中传递数据,此时数据并不会分发至Activity。一旦Activity激活,数据便会自动填充至Activity。
使用LiveData的好处:
- 能够保证数据和UI界面的统一(类似于双向绑定)
- 减少内存泄露(当生命周期为OnDestory或者Onstop时会将观察者清理,就是Activity未激活)
- 当Activity停止时不会引起崩溃(Onstop,不会分发数据)
- 不需要手动去处理响应生命周期的变化(内部已经实现)
- UI界面实时更新
- 屏幕反转不会刷新数据
LiveData的使用:
```kotlin // 继承ViewModel类 class MyViewModel:ViewModel() { // 使用LiveData的子类MutableLiveData,MutableLiveData继承于LiveData val liveData = MutableLiveData() var stop = true fun start(){
} fun stop(){liveData.postValue(0)
object :Thread(){
override fun run() {
super.run()
while (stop){
sleep(3000)
var value = liveData.value
if (value != null) {
liveData.postValue(value + 2)
}
}
}
}.start()
} }stop = false
// MainActivity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 引入ViewModel类 val myViewModel = ViewModelProvider(this,ViewModelProvider.NewInstanceFactory()).get(MyViewModel::class.java) // 添加liveData的观察者 myViewModel.liveData.observe(this, Observer { num.text = it.toString() }) stop.setOnClickListener { myViewModel.stop() } start.setOnClickListener { myViewModel.start() } } } ```