Android Jetpack架構之ViewModel
阿新 • • 發佈:2021-08-28
一、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