Очистка Android ViewModel вручную?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Очистка Android ViewModel вручную?

Сообщение Anonymous »


Изменить: Этот вопрос немного устарел, поскольку Google предоставил нам возможность ограничивать ViewModel навигационными графами. Лучшим подходом (вместо того, чтобы пытаться очистить модели на основе действий) было бы создание конкретных навигационных графиков для нужного количества экранов и их области действия.

Со ссылкой на класс android.arch.lifecycle.ViewModel.

ViewModel ограничен жизненным циклом компонента пользовательского интерфейса, к которому он относится, поэтому в приложении на основе Fragment это будет жизненный цикл фрагмента. Это хорошо.

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

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

Это обсуждается в официальной документации ViewModel:

ViewModels также можно использовать в качестве уровня связи между различными Фрагменты активности. Каждый фрагмент может получить ViewModel. используя тот же ключ через свою активность. Это позволяет общаться между фрагментами несвязанным образом, так что им никогда не нужно поговорите с другим фрагментом напрямую.

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

Теперь в новом шаблоне навигации Jetpack рекомендуется использовать архитектуру «Одно действие / множество фрагментов». Это означает, что активность существует в течение всего времени использования приложения.

т.е. любые общие экземпляры ViewModel, ограниченные жизненным циклом Activity, никогда не будут очищены — память остается в постоянном использовании.

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

Как можно вручную очистить ViewModel из его ViewModelStore или фрагмента держателя?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»