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

 

posted @ 2021-08-28 17:41  naray  阅读(170)  评论(0编辑  收藏  举报