Кнопка Power button теперь вызывает onStop в Activity на Android KitKat, ранее был только onPause?

Итак, я просто понял, что onStop получает вызов в моей активности, когда нажата кнопка питания, чтобы отключить экран. Раньше вызывался только onPause. Было ли это изменение KitKat и есть ли какие-либо заметки об этом где-нибудь (было ли это намеренно)? Является ли это изменением KitKat или чем-то, что реализованы конкретными производителями?

РЕДАКТИРОВАТЬ: я буду обновлять это в ближайшее время с дополнительной информацией. Я думаю, что изменение было более тонким, чем я впервые осознал, возможно, из-за того, что я занимаюсь частичной блокировкой слежения или слушал обновления GPS. Несмотря ни на что, все, что я знаю, это то, что в моем коде, перед KitKat, onStop не вызывался при нажатии кнопки питания. Возможно, это также зависит от устройства.

EDIT: новая информация. При следующих настройках onStop() не вызывается при нажатии кнопки питания: Android minSDKVersion = 4 и targetSDKVersion = 8 (если вы используете Android Studio, установите compileSdkVersion = 8). Проверено это на двух устройствах (запуск KitKat и JellyBean). Таким образом, эта проблема не является KitKat, как было упомянуто ранее в оригинале, а скорее min, target sdk settings. Bounty будет награжден тем, кто может найти ссылки на то, когда он изменился, или по крайней мере покажет первый параметр min/target sdk, который изменил поведение, чтобы вызвать onStop нажатием кнопки питания.

Ответ 1

Изменение жизненного цикла произошло с помощью Honeycomb или при смене приложения, которое предназначалось для sdk 10 или ниже для одного, которое предназначено для sdk 11 или выше.

Если в Android-проекте объявляется targetSDKversion 10 или меньше, то при нажатии кнопки питания вызывается onPause, , но не onStop. Это противоречит тому, что думают многие. Однако, если targetSDKversion = 11 или выше, onPause, то onStop будет вызываться при нажатии кнопки питания.

Следует отметить, что в некоторых документах указано, что onStop будет "Вызывается, когда действие больше не отображается пользователю, , потому что другое действие возобновлено и охватывает этот." (выделено мной), но во многих других местах он просто утверждает, что onStop будет вызываться всякий раз, когда текущая активность больше не видна. Таким образом, до SDK 11, возможно, щелчок кнопки питания был предназначен для просто вызова onPause, потому что никакая другая деятельность не охватывала текущий. Экран был просто выключен. Затем с помощью Honeycomb они изменили реализацию в соответствии с другой интерпретацией (больше не видно).

Ответ 2

ИМО, Киткат не имеет к этому никакого отношения. onStop() будет вызываться всякий раз, когда ваша активность больше не будет видна пользователю. Когда экран выключается (например, когда вы нажимаете кнопку питания, чтобы заблокировать экран), сначала будет вызываться onPause(). Затем следует вызвать onStop(). Но это зависит от ситуации с памятью устройства. Если вы используете устройство с низкой памятью, которое не может обеспечить достаточное количество памяти для работы вашего процесса активности, onStop() может не вызываться. Вы можете видеть, что в этой ситуации вызывается только onPause(). Для справки: http://developer.android.com/reference/android/app/Activity.html#onStop()

Ответ 3

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

Не указано, что именно поэтому вы испытываете изменение жизненного цикла, но IMO, если Android теперь автоматически пытается создать "более компактную" среду, это может заставить приложение вызвать onStop(), когда он освобождается Ресурсы.

Я знаю, что это не точный ответ, но я надеюсь, что это поможет. Я согласен с тем, что это не всегда так, и вы определенно находитесь на чем-то интересном здесь.

Ответ 4

Еще один важный момент -

Если вы измените настройку для блокировки телефона через 10 секунд после нажатия кнопки питания, то через 10 секунд после нажатия кнопки питания будет вызываться onStop().

Ответ 5

Ваша активность в паузе будет вызываться только в том случае, если ваша активность все еще частично видима пользователю, в противном случае она остановилась.

Итак, кнопка питания всегда называлась onStop(), потому что ваша активность фактически остановлена ​​не просто приостановлена.