Jetpact 之 LiveData

LiveData和ViewModel的關(guān)系
  • 在ViewModel中的數(shù)據(jù)發(fā)生變化是通知頁(yè)面


    image.png

    當(dāng)ViewModel數(shù)據(jù)發(fā)生變化通過(guò)LiveData通知View數(shù)據(jù)變化進(jìn)行更新

LiveData應(yīng)用:
  • 非UI線程使用postValue
  • UI線程使用setValue
class MyViewModel :ViewModel() {
    private lateinit var liveData:MutableLiveData<Int>

   fun getCurrentSecond():MutableLiveData<Int>{
        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<TextView>(R.id.textView).text = viewModel?.getCurrentSecond()?.value.toString()
        viewModel?.getCurrentSecond()?.observe(this) {
            findViewById<TextView>(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的優(yōu)勢(shì):
  • 確保頁(yè)面符合數(shù)據(jù)狀態(tài)
  • 不會(huì)發(fā)生內(nèi)存泄漏
  • 不會(huì)因Activity停止而導(dǎo)致崩潰
  • 不在需要手動(dòng)處理生命周期
  • 數(shù)據(jù)始終保持最新?tīng)顟B(tài)
  • 適當(dāng)?shù)呐渲酶?/li>
  • 共享資源
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言: 這是一篇Android官方關(guān)于LiveData介紹的翻譯,正如名字所展示的,它是對(duì)存活數(shù)據(jù)的一個(gè)封裝類,把...
    三秋桂子儀同三司閱讀 2,730評(píng)論 1 14
  • ??LiveData是一個(gè)可被觀察的數(shù)據(jù)持有者類。與常規(guī)的Observable不同,LiveData能意識(shí)到應(yīng)用程...
    鶴鶴閱讀 47,257評(píng)論 6 42
  • 簡(jiǎn)介 LiveData是JetPack提供的一種響應(yīng)式編程組件,它可以包含任何數(shù)據(jù)類型的數(shù)據(jù)(String,Int...
    dashingqi閱讀 873評(píng)論 0 1
  • 本文章已授權(quán)微信公眾號(hào)郭霖(guolin_blog)轉(zhuǎn)載。 本文章主要是對(duì)LiveData進(jìn)行源碼分析,建議對(duì)著示...
    譚嘉俊閱讀 1,442評(píng)論 2 3
  • 示例應(yīng)用程序 使用LiveData的優(yōu)點(diǎn) 使用LiveData對(duì)象創(chuàng)建LiveData對(duì)象觀察LiveData對(duì)象...
    yyg閱讀 5,930評(píng)論 5 7

友情鏈接更多精彩內(nèi)容