Android 创建视图模型的方式有什么不同?

Android 创建视图模型的方式有什么不同?,android,android-studio,kotlin,mvvm,dependency-injection,Android,Android Studio,Kotlin,Mvvm,Dependency Injection,我已经在我的项目中使用viewModel了。但ıknowı可以通过多种方式初始化viewmodel。你知道这些方法有什么不同吗 viewModel=ViewModelProvider(this).get(ViewModelClass::class.java) viewModel=ViewModelClass() viewModel:ViewModelClass:by viewModels() viewModel:ViewModelClass by ViewModelse{ ViewModelF

我已经在我的项目中使用viewModel了。但ıknowı可以通过多种方式初始化viewmodel。你知道这些方法有什么不同吗

  • viewModel=ViewModelProvider(this).get(ViewModelClass::class.java)
  • viewModel=ViewModelClass()
  • viewModel:ViewModelClass:by viewModels()
  • viewModel:ViewModelClass by ViewModelse{ ViewModelFactory(此,repository(),意图 }
技术上的区别是什么?

使用

  • viewModel=ViewModelProvider(this.get)(ViewModelClass::class.java)
    您正在创建一个作用域到此片段/活动的
    ViewModelClass
    实例,并且每当重新创建该活动时,都会分配相同的viewModel实例,而不是新实例

  • viewModel=ViewModelClass()
    尽管它似乎是正确的,但事实并非如此。每当重新创建活动时,都会分配新的viewModel实例。不要尝试通过直接调用其构造函数来创建viewModel实例,而是让
    ViewModelProvider
    来完成这项工作

  • viewModel:viewmodelsclass by viewModels()
    感谢您创建了viewModel。它类似于

  • viewModel:ViewModelClass by ViewModels{ViewModelFactory(this,repository(),intent)}
代表团在科特林。
  val viewModel by lazy{
     ViewModelProvider(this).get(MyViewModel::class.java)
  }
val viewModel by lazy {
    ViewModelProvider(this, ViewModelFactory(this,Reposityory(),intent)).get(MyViewModel::class.java)
}