一般放在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(){
    1. liveData.postValue(0)
    2. object :Thread(){
    3. override fun run() {
    4. super.run()
    5. while (stop){
    6. sleep(3000)
    7. var value = liveData.value
    8. if (value != null) {
    9. liveData.postValue(value + 2)
    10. }
    11. }
    12. }
    13. }.start()
    } fun stop(){
    1. 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() } } } ```