1. 程式人生 > 其它 >Android Jetpack架構之ViewModel

Android Jetpack架構之ViewModel

一、ViewModel是什麼?

  ViewModel以注重元件生命週期的方式儲存和管理頁面相關的資料。ViewModel讓Activity未設定configChanages="orientation|screenSize"屬性時,裝置發生旋轉後,頁面資料得以繼續留存。

二、ViewModel產生背景?

  • 瞬態資料的丟失。
  • 非同步請求的記憶體洩漏。
  • 類程式碼增多邏輯複雜,引起的難維護。

三、ViewModel的作用

  • ViewModel是介於View(檢視)和Model(資料)之前的橋樑,幫助View和Model傳遞資料。
  • 解耦View和Model之間的耦合,並提供View和Model間的資料通訊。

四、示例

  RViewModel類:

class RViewModel : ViewModel() {

    internal var count: Int = 0

}

  MainActivity類,未設定configChanages屬性:

class MainActivity : AppCompatActivity() {

    private var _rViewModel: RViewModel? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        _rViewModel 
= ViewModelProvider(this).get(RViewModel::class.java) button.setOnClickListener { _rViewModel?.count = (_rViewModel?.count ?: 0) + 1 countText.text = _rViewModel?.count?.toString() ?: "0" } } override fun onStart() { super.onStart() Log.d(
"main", "${_rViewModel?.count?.toString()}") countText.text = _rViewModel?.count?.toString() ?: "0" } }

  結果:

D/main: 1
D/main: 2
D/main: 3
D/main: 4
D/main: 5
D/main: 旋轉後
D/main: 5