2013-08-05 5 views
7

Как известно, поток по умолчанию в Android для такого сценария вызывает методы , onStop, перед тем как отправить ссылку на объект Activity.Может ли Android «убить» активность, не убивая приложение?

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

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

Какой вид меня заставляет задуматься, потому что я считаю, что «убийство приложений» на низких ресурсах по сути является просто старым сигнальным путем, действительно ли система Android «убивает» (освобождает) активность без вызова этих методов? Или я преследую призраков?

+0

Является ли это одним из тысяч типов сценария или происходит регулярно? – IanB

+0

Один в тысячу. – George

+0

Можете ли вы предоставить какие-либо доказательства для этого? Я не уверен, что вы подразумеваете под «убитым».Я не считаю, что Android, например, выпустит Activity for GC, не назвав сначала метод 'onDestroy'. Как вы заметили, он может завершить процесс, который содержит Activity, который будет иметь влияние на завершение Activity, wo/callback. Существует также Doze, который может сделать активность безмятежной. –

ответ

0

Система Android фактически «убивает» (освобождает) действие мгновенно без вызова этих методов?

Да, так оно и есть. Вот что документы говорят относительно onStop():

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

и в отношении к onDestroy():

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

Не считайте, что этот метод называется местом для с сохранением данных! Например, если действие редактирует данные в поставщике контента , эти изменения должны быть зафиксированы либо в onPause(), либо в onSaveInstanceState (Bundle), но не здесь.

«Однако я не могу принудительно воспроизвести это». - вы можете воспроизвести эту ситуацию, отправив приложение в фоновом режиме, а затем с помощью DDMS, чтобы убить процесс вручную.

+2

Я хочу «убить» (высвободить) действие * без * убийства приложения. Я прошу ли систему Android убить активность, не вызывая эти методы и не убивая приложение? – George

+1

Извините, я неправильно понял. Я не могу сказать точно, но, читая документы, я вижу, что повсюду говорится об убийстве процесса приложения, а не о конкретном действии. Поэтому я бы предположил, что если одно из ваших действий выполняет какую-то «тяжелую» задачу и отправляется на задний план, тогда ОС Android убьет все приложение. –

+0

Я также сталкиваюсь с таким же поведением, как и в моем тестировании - вызываются либо onStop(), и onDestroy(), и уничтожается действие, или приложение уничтожается. Но я не могу найти окончательного ответа в документах. – George

2

Android app out of memory issues - tried everything and still at a loss

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

Смежные вопросы