Можно ли убить активность только с помощью onPause?

Вот что я прочитал в книге:

Активность может быть уничтожена молча после onPause(). Мы никогда не должны предполагать, что вызывается либо onStop(), либо onDestroy().

Но согласно документации Pause относится к частично видимой, можно ли убить частично видимую активность без вызова onStop или onDestory?


person molikto    schedule 09.07.2012    source источник
comment
пожалуйста, используйте тег android-activity в будущем :)   -  person Alex Lockwood    schedule 09.07.2012


Ответы (2)


Нет никакой гарантии, что будут вызваны onStop или onDestroy. В ситуациях, когда памяти катастрофически не хватает, частично видимое и не в фокусе Activity может быть уничтожено для восстановления ресурсов. Однако нет никакой гарантии, что какой-либо из двух упомянутых методов жизненного цикла будет вызван до этого. Вот почему важно сохранять постоянное состояние в onPause вместо onStop и onDestroy.

person Alex Lockwood    schedule 09.07.2012
comment
Не будет ли ужасно выглядеть, когда частично видимая активность будет убита? Видимая часть просто исчезнет? - person molikto; 09.07.2012
comment
Да... но я считаю, что система не будет слишком часто уничтожать частично видимую фоновую активность (особенно сейчас, когда телефоны такие мощные). Но все равно важно его учитывать. - person Alex Lockwood; 09.07.2012
comment
@AlexLockwood +1 за отличное разъяснение. Когда вы говорите Вот почему так важно сохранять постоянное состояние в onPause, подразумеваете ли вы, что onPause гарантированно будет вызываться перед тем, как будет уничтожена системой? - person ateiob; 09.08.2012
comment
@ateiob Ну, скажем так ... если система когда-либо отключала Activity до onPause, то, скорее всего, телефон пользователя полностью разрядился и вот-вот выйдет из строя / перезагрузится из-за нехватки доступных ресурсов памяти. Система Android ставит текущий передний план Activity (тот, с которым взаимодействует пользователь) в качестве своего главного приоритета, чтобы не испортить взаимодействие с пользователем, поэтому что-то подобное было бы и редким, и внезапным (и, таким образом, не было бы хорошего способа реагировать на такое событие). Вам не нужно беспокоиться об учете этого. - person Alex Lockwood; 09.08.2012
comment
Поскольку сегодня многие приложения ориентированы на ›= Android 4.0 ICS, не будет ли безопасно предположить, что onStop будет вызываться всегда? Даже в учебном пособии говорится что-то вроде: «Во время onPause() следует избегать интенсивной работы ЦП, такой как запись в базу данных, потому что это может замедлить видимый переход к следующему действию (вместо этого вам следует выполнять тяжелые операции отключения во время работы onPause()). onStop()) Возможно, вам следует обновить ответ, чтобы отразить это изменение :) - person Vicky Chijwani; 26.02.2015
comment
@AlexLockwood этот ответ следует обновить, поскольку (как говорится в документации) Начиная с Honeycomb, приложение не находится в состоянии, которое можно убить, пока его onStop() не вернется. - person GVillani82; 25.05.2015

Ссылаясь на жизненный цикл активности – если активность уничтожается системой, ее можно тихо убить в состоянии паузы при вызове onStop или onDestroy.

person shmoula    schedule 09.07.2012