Безопасно ли освобождать ресурсы в onStop ()? - PullRequest
0 голосов
/ 02 ноября 2011

Привет всем!

У меня есть Activity, который выделяет довольно много памяти, пока показывает видимый макет.Пользовательский интерфейс в большой степени зависит от этой памяти, однако нет необходимости хранить эти распределения после того, как пользователь отклоняется от Activity (обычно путем фокусировки другого Activity).

Activityначинает выделять память в onResume() и с этим все в порядке.Однако, это смущение меня немного смущает.На данный момент я освобождаю всю память в onPause(), которая также уничтожает соответствующие элементы пользовательского интерфейса.Поскольку Activity все еще виден во время выполнения onPause(), пользователь увидит, что фактические элементы пользовательского интерфейса разрушаются.Это уродливо и не то, что я хочу.

Так что мой вопрос:

  1. Безопасно ли освобождать память (уничтожать пользовательский интерфейс) в onStop() (согласно документации Activity не отображается при вызове onStop())?
  2. Is onStop() надежный?
  3. Гарантируется ли onStop() вызов при каждом вызове onPause()?

Edit: Я чувствую, что должен объяснить немного яснее, что меня смущает.Согласно developer.android.com :

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

Метод onStop() помечен как "убиваемый".

  • Означает ли вышеизложенное (особенно часть "after that method returns"), что вся область действия onStop() гарантированно будет работать, но как только она вернется, ничего не гарантируется во время выполнения (например, порожденный поток, запущенный в onStop())?

  • Или это означает, что onStop() может быть прерван даже до того, как он достигнет конца своей области действия (начиная с части killed at any time)?

  • Или это означает что-то еще, чего я - в своей божественной глупости - не вижу.

Ответы [ 4 ]

0 голосов
/ 02 ноября 2011

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

выполнение каких-либо действий внутри onPause гарантирует, что элементы, которые необходимо сохранить, все еще не повреждены, прежде чем отпустить их - например, вам нужно сохранить текст в вашем EditText или в / /отключение позиции RadioButtons и т. д.

освобождение, однако, ничего из этого больше не требует, поэтому будет хорошо, если вы сделаете это в вашем onStop

0 голосов
/ 02 ноября 2011
  1. это так же безопасно, как и все остальное?Хуже того, ваше приложение будет убито с помощью onDestroy.В мобильной разработке вы в основном должны предполагать, что в любой момент ваше приложение может быть убито.
  2. В течение некоторого времени для меня было надежным выпускать медиа-объекты.
  3. Не совсем гарантировано,как иногда вызывается onDestroy в зависимости от того, что происходит.
0 голосов
/ 02 ноября 2011

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

0 голосов
/ 02 ноября 2011

onStop() должен быть безопасным и надежным достаточно для вашей цели.

«Гарантированный» является относительным в этом случае, учитывая, что ваша деятельность может быть прекращена без какого-либо уведомления.Но в этом случае ваши ресурсы памяти все равно высвобождаются.

...