Поддержание активности

1

У меня есть ряд действий в моей заявке, которая начинается с Activity "A", а затем "B", "C", "D" и "E". Деятельность "A", "B", "C" и "D" является прозрачной деятельностью (прозрачная тема), в то время как "E" непрозрачна.

Требование "Деятельность" не должно быть завершено. Я прочитал блог http://www.skill-guru.com/blog/2011/01/13/android-activity-life-cycle/, в котором говорится, что

  1. Если активность потеряла фокус, но все еще видна (т.е. Новая не полноразмерная или прозрачная деятельность фокусируется на вашей деятельности), она приостанавливается.
  2. Если действие полностью закрыто другой деятельностью, оно прекращается.

Функция onStop() Activity "A" не вызывается до тех пор, пока пользователь не просмотрит Activity "D", однако он вызывается, когда активируется действие "E".

В любом случае, мы можем сохранить активность "А" в стеке "Активность"? Является ли это хорошим решением сохранить статическую ссылку объекта Activity в приложении, чтобы среда не убивала его? Какие меры предосторожности я могу предпринять, чтобы "А" не был убит? Есть ли способ, которым я могу получить уведомление, если это будет убито фреймворком, чтобы я мог его воссоздать?

Теги:
android-activity
lifecycle

1 ответ

4
Лучший ответ

Требование "Деятельность" не должно быть завершено.

Действие завершается по вызову finish(). Обычно это происходит, когда пользователь нажимает кнопку BACK.

Функция onStop() Activity "A" не вызывается до тех пор, пока пользователь не просмотрит Activity "D", однако он вызывается, когда активируется действие "E".

Верный.

В любом случае, мы можем сохранить активность "А" в стеке "Активность"?

Он "работает" в стеке действий (для любого разумного определения "работа") до тех пор, пока вы не назовете finish(), пользователь нажимает BACK или процесс завершается. onStop() не влияет на это.

Является ли это хорошим решением сохранить статическую ссылку объекта Activity в приложении, чтобы среда не убивала его?

Нет, потому что это не поможет. Активность останется в памяти до тех пор, пока вы не назовете finish(), пользователь нажимает BACK или процесс завершается.

Какие меры предосторожности я могу предпринять, чтобы "А" не был убит?

Не называть finish().

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

Ваша деятельность будет вызвана с onDestroy() если она будет завершена. Это может произойти или не произойти, если процесс завершен, в зависимости от того, что вызвало завершение и состояние системы в то время.

  • 0
    Спасибо @ Марк Мерфи. Это отвечает на все.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню