Почему я должен использовать viewmodelproviders для viewmodels? - PullRequest
1 голос
/ 01 октября 2019

Почему я должен использовать viewmodelproviders для viewmodels?

Почему я просто не могу добавить пользовательскую одноэлементную аннотацию к моей модели представления, а затем внедрить эту модель представления в класс фрагмента?

Примерно так:

@MainScope
class MainViewModel @Inject constructor(): ViewModel()

И затем:

open class BaseFragment<T: ViewModel>: DaggerFragment() {
@Inject
protected lateinit var viewModel: T

Оба случая не зависят от поворота экрана.

Есть ли недостатки в случае с одноэлементной аннотацией? Я вижу только преимущества, при таком подходе мне не нужно копировать / вставлять тонны кода.

1 Ответ

2 голосов
/ 02 октября 2019

Почему я должен использовать viewmodelproviders для viewmodels?

Чтобы правильно вызвать viewModel.onCleared() callback в нужное время с помощью ComponentActivity.

(и дляубедитесь, что он создан только один раз для заданного ViewModelStoreOwner).

Почему я просто не могу добавить пользовательскую одноэлементную аннотацию к моей модели представления, а затем внедрить эту модель представления в класс фрагмента?

Поскольку вы не получите viewModel.onCleared()Обратный вызов вызывается правильно в нужное время с помощью ComponentActivity.

Есть ли недостатки в случае синглтонной аннотации? Я вижу только преимущества:

То, что вы не получаете viewModel.onCleared().

Также, если у вас есть одноэлементный вариант, то ViewModel не умрет вместе с завершающей обработкойАктивность и оставайтесь в живых даже при обратной навигации (что, вероятно, не предназначено).

при таком подходе мне не нужно копировать / вставлять тонны кода.

Вы используете Kotlin. Используйте функции расширения.

...