Jetpact 之 LiveData

LiveData和ViewModel的关系
  • 在ViewModel中的数据发生变化是通知页面


    image.png

    当ViewModel数据发生变化通过LiveData通知View数据变化进行更新

LiveData应用:
  • 非UI线程使用postValue
  • UI线程使用setValue
class MyViewModel :ViewModel() {
    private lateinit var liveData:MutableLiveData

   fun getCurrentSecond():MutableLiveData{
        if(!this::liveData.isInitialized){
            liveData = MutableLiveData()
            liveData.value = 0
        }
        return liveData
    }
}
class Test2Activity : AppCompatActivity() {

    private var viewModel: MyViewModel? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_test2)

        viewModel =
            ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory(application)).get(
                MyViewModel::class.java
            )
        findViewById(R.id.textView).text = viewModel?.getCurrentSecond()?.value.toString()
        viewModel?.getCurrentSecond()?.observe(this) {
            findViewById(R.id.textView).text = it.toString()
        }
        startTime()
    }

    private fun startTime() {
        Timer().schedule(
            object : TimerTask() {
                override fun run() {
                    viewModel?.getCurrentSecond()
                        ?.postValue((viewModel?.getCurrentSecond()?.value?.plus(1)))
                }

            },
            1000,
            1000
        )
    }
}
LiveData的优势:
  • 确保页面符合数据状态
  • 不会发生内存泄漏
  • 不会因Activity停止而导致崩溃
  • 不在需要手动处理生命周期
  • 数据始终保持最新状态
  • 适当的配置更改
  • 共享资源

你可能感兴趣的:(Jetpact 之 LiveData)