在 Activity 中初始化 ViewModel,可以通过以下两种方法:
一、使用“viewModels()”方法:
在 Activity 中使用以下代码初始化 ViewModel:
class MainActivity : AppCompatActivity() {
private val viewModel by viewModels()
// 其他代码...
}
优点:
1、使用便捷:使用简单,省去了手动创建 ViewModelProvider 的步骤,代码更简洁。
2、生命周期感知:使用“viewModels()”方法创建出来的 ViewModel 可以感知到 Activity 的生命周期变化,不需要手动处理 ViewModel 的生命周期。
缺点:
1、无法自定义 ViewModelProvider:使用“viewModels()”方法可以自动创建 ViewModelProvider,但是无法自定义创建方式。如果需要自定义 ViewModelProvider,就需要使用第二种方法。
二、使用“ViewModelProvider(this).get(ViewModel::class.java)”方法:
在 Activity 中使用以下代码初始化 ViewModel:
class MainActivity : AppCompatActivity() {
private lateinit var viewModel: ViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get(ViewModel::class.java)
// 其他代码...
}
}
优点:
1、自定义 ViewModelProvider:使用“ViewModelProvider(this).get(ViewModel::class.java)”方法可以自定义 ViewModelProvider 的创建方式,可以传入自定义的 Factory。
2、可读性强:使用“ViewModelProvider(this).get(ViewModel::class.java)”方法代码更加清晰易懂,可以看出是通过 ViewModelProvider 获取 ViewModel。
缺点:
1、需要手动处理 ViewModel 生命周期。
注:以上两种初始化 ViewModel 的方式本质上是一样的,只是处理方式略有不同,选择哪种方式取决于个人习惯和需要。