ViewModel VS Static / Object
Пытаюсь найти фундаментальную разницу между ViewModel и Static(java) или Object(kotlin).
Основной аргумент, который я вижу в статьях, это то, что ViewModel переживает поворот Activity.
Но ведь тоже самое делают и статичные методы и объекты?
И LiveData ведет в статичных местах себя как и во ViewModel.
Зачем придумывать что-то новое, когда в языке уже есть велосипед?
К тому же ViewModel отлично работает только во фрагментах при общей Активити. Если надо обратиться к одной модели из разных Активити - надо немного потанцевать с бубном, чтобы верно указать владельца. У статиков такой проблемы нет.
ViewModel
class MyVM : ViewModel() {
var a: String = "Hello!"
}
//////////////////////
class MainActivity : AppCompatActivity() {
lateinit var vm: MyVM
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
vm = ViewModelProvider(this).get(MyVM::class.java)
textView.settext(vm.a.value)
}
Object / Static
object VM{
var a: String = "Hello!"
}
//////////////////////
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textView.settext(VM.a)
}
Ответы (1 шт):
ViewModel привязывается к активити или фрагменту и переживает их смену конфигурации, но это не означает, что она живёт вечно, как статик или object. При полном уничтожении активити или фрагмента (выход из экрана) ViewModel уничтожается вместе с ними, освобождая занятые ресурсы. https://developer.android.com/topic/libraries/architecture/viewmodel#lifecycle