返回
ViewModel: 一例浅谈
Android
2023-11-09 04:32:12
两年前,我在开发Android初学者课程,该课程将学生从零基础带入Android应用编程世界。作为课程的一部分,学生们构建了一个名为Court-Counter的简单屏幕应用。Court-Counter是一个极其简单的应用,它允许用户修改篮球比赛的比分。
在这个应用中,我们使用的是典型的面向对象编程(OOP)方式,即在活动中维护比赛状态。这种方式的问题在于,它会导致活动变得臃肿且难以维护。随着应用变得越来越复杂,这种问题会变得更加严重。
为了解决这个问题,Android架构组件引入了ViewModel。ViewModel是一个存储和管理UI相关数据的类,它独立于活动和片段的生命周期。这意味着,即使活动或片段被销毁并重新创建,ViewModel仍能保留其数据。
ViewModel有以下优点:
- 可测试性: 由于ViewModel独立于UI,因此可以很容易地对其进行单元测试。
- 可重用性: ViewModel可以在多个活动或片段中重用,从而减少代码重复。
- 易于维护: ViewModel使代码更容易组织和维护,因为它将UI逻辑与活动和片段的生命周期逻辑分离。
在Court-Counter应用中,我们可以使用ViewModel来存储比赛状态。ViewModel将包含一个可观察的整数,代表当前比分。当比分发生变化时,ViewModel会通知观察者,观察者(例如活动或片段)会更新UI。
以下是如何使用ViewModel实现Court-Counter应用:
class CourtCounterViewModel : ViewModel() {
private val _score = MutableLiveData<Int>()
val score: LiveData<Int>
get() = _score
fun incrementScore() {
_score.value = (_score.value ?: 0) + 1
}
fun decrementScore() {
_score.value = (_score.value ?: 0) - 1
}
}
在活动或片段中,我们可以通过以下方式观察ViewModel中的比分:
viewModel.score.observe(this, Observer { newScore ->
// 更新UI以显示新比分
})
ViewModel是一种强大的工具,可以显著改善Android应用的架构和可维护性。通过将UI相关数据与活动和片段的生命周期逻辑分离,ViewModel可以使代码更易于测试、重用和维护。