Как лучше всего очистить Android ViewModel, когда приложение убито? - PullRequest
0 голосов
/ 05 марта 2020

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

Это прекрасно работает, когда деятельность ViewModel явно завершена. Но поскольку onDestroy() не вызывается, когда приложение убито, onCleared() не является ни тем, ни другим.

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

Что работает

  1. Операция запускается, и пользователь делает снимок, который сохраняется во внутренней памяти приложения.
  2. Пользователь оставляет действие без сохранения.
  3. Операция уничтожается и вызывается ViewModel.onCleared(), который удаляет неиспользуемое изображение.

Что не работает (но может быть решено с помощью Activity.onSaveInstanceState()

  1. Операция запущена, и пользователь делает снимок, который сохраняется во внутренней части приложения хранилище.

  2. Процесс действия прекращается системой по любой причине.

  3. Не вызывается ни Activity.onDestroy, ни ViewModel.onCleared().

Что тоже не работает

  1. * 104 9 * Операция начинается, и пользователь делает снимок, который сохраняется во внутреннем хранилище приложения.
  2. Пользователь убивает приложение, проводя пальцем.

  3. Не вызывается ни Activity.onDestroy, ни ViewModel.onCleared().

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

Я что-то упустил?

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

По-видимому, невозможно гарантировать, что ViewModel.onCleared() вызывается при любых обстоятельствах.

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

0 голосов
/ 05 марта 2020

Если я вас правильно понимаю, нужно ли вам сохранять некоторые данные, когда активность прерывается? Если это так, то лучший способ реализовать это - onSaveInstanceState (). Во ViewModel удобно хранить все данные, необходимые для формирования экрана. Они будут жить при повороте экрана, но будут d ie, когда приложение будет убито системой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...