Разница между ViewModel с LiveData и ViewModel без LiveData?

Я читал много руководств о модели представления и живых данных, но на самом деле я не использую живые данные в классе модели представления в шаблоне mvvm. заранее спасибо.

Если вам нужно наблюдать за состоянием объекта, вам нужен LiveData. Нет никакой разницы, я думаю, все дело в требованиях и передовых методах.

ADM 23.02.2019 13:32
6
1
4 478
4

Ответы 4

Шаблон MVVM состоит только в том, чтобы говорить вниз V -> VM -> M и реагировать на M -> VM -> V. Это означает, что View может вызывать методы в ViewModel, но ViewModel не имеет ссылки на View для вызова методов. на нем (установочные данные). Способ связи ViewModel с представлением заключается в том, что представление наблюдает за некоторой переменной (ObservableField, LiveData, RxJava и т. д.).

LiveData — отличный наблюдаемый объект для обеспечения связи между ViewModel и View, особенно при изменении состояния, таком как вращение. Он также обеспечивает отличную связь между моделью и представлением в отношении изменений базы данных и помещения.

Согласно Google Docs, если вы уже используете такую ​​библиотеку, как Rx или Agera, вы можете продолжать использовать их вместо LiveData. Но в этом случае вы несете ответственность за обработку выделения и отмены выделения объектов для каждого жизненного цикла компонентов Android.

При работе с шаблоном MVVM, поскольку модель представления не имеет ссылки на представление, вам понадобится наблюдаемый держатель данных для наблюдения за изменениями, чтобы вы могли правильно обновить свое представление.

В этом случае вы можете использовать живые данные, один из компонентов архитектуры или любой другой наблюдаемый объект, например, из Rx.

Основное отличие заключается в том, что livedata учитывает жизненный цикл Android, а наблюдаемые rx — нет.

С livedata не будет сбоев из-за остановленной активности при вызове onChange, поскольку он знает о жизненном цикле. Но без livedata вы должны справиться с этим делом.

Разработчики Android обычно используют ViewModel в качестве контейнера LiveData, подобного этому

class MyViewModel {
    val myLiveData = MutableLiveData<String>()
}

Но почему бы нам не использовать класс String напрямую?

class MyViewModel {
    val myString = "Hello"
}

Потому что мы хотим использовать шаблон Observer для String.

model.myLiveData.postValue("Echo")

model.myLiveData.observe(this, Observer {
    // Show "Echo"
    toast(it)
})

Зачем нам тогда ViewModel? Потому что мы хотим получить один и тот же экземпляр ViewModel (синглтон) в нашей активности или фрагменте.

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    viewModel = ViewModelProviders.of(this)[MyViewModel::class.java]
    viewModel.myLiveData.observe(this, Observer {
        textView.text = it
    })

Думаю, этого должно быть достаточно, чтобы увидеть разницу между ViewModel и LiveData.

Different between ViewModel with LiveData vs ViewModel Without LiveData?

Вам решать, нужны ли вам LiveData на ViewModel или нет?

i do not get actually use of livedata within viewmodel class in mvvm pattern.

Поняв разницу между ViewModel и LiveData, пожалуйста, прочитайте больше о шаблоне MVVM.

Модель просмотра в Model-View-View-Model отличается от ViewModel и LiveData Jetpack. Модель просмотра в MVVM — это концепция, вы можете создать свою собственную модель просмотра, используя обычный класс Java. Пока это соответствует поведению MVVM.

В простом формате livedata — это волшебный наблюдаемый класс держателя данных, который также учитывает жизненный цикл.

Если вы используете livedata внутри viewmodel:

  1. вы можете setValue или postValue что-либо для livedata, и ваш пользовательский интерфейс сможет наблюдать значение, его изменения и отображать в пользовательском интерфейсе.
  2. вы можете использовать dataBinding для лучшего подхода к наблюдению за livedata.
  3. не требуется ручная настройка для достижения утечки памяти.

Другие вопросы по теме