Android onCreate вызывается после блокировки экрана

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

Ответ 1

Для меня я

android:configChanges="orientation"

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

android:configChanges="keyboardHidden|orientation|screenSize"

в теге активности

Как указано в Обработка конфигурации изменится

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

Ответ 2

Так работает Android, и он решает, когда нужно уничтожить ваше представление. Когда вы блокируете свой телефон, приложение переходит в состояние паузы (onPause) жизненного цикла активности.

Когда действие находится в состоянии паузы, и если оно занимает много памяти, система Android имеет права убить ваше приложение (onStop).

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

Ответ 3

onDestroy() вызывается, когда после возвращения экрана вы видите рабочий стол (приложение shutdown onDestroy()).

После того, как экран вернется и вы увидите первый макет/представление своего приложения, он вызывает onStop() и onCreate().

После того, как экран вернется и вы увидите тот же самый вид до того, как экран исчез, тогда вызывается onPause() и onResume().

Ответ 4

Это происходит, если "Активность" находится в режиме "Ландшафтный", а экран "Заблокировать" активирован пользователем.

Это может быть две причины:

  • Если включен какой-либо экран блокировки и активность находится в режиме ландшафта: Если устройство имеет экран блокировки в портретном режиме, когда устройство заблокировано, оно автоматически переключается в портретный режим (даже если ваша активность была в ландшафтном режиме). И когда устройство разблокировано, ваша активность становится видимой, но она снова переходит из "Портрет" ( "Когда заблокирована" ) в "Пейзаж", поэтому "Активность" уничтожается и воссоздается.

  • Вот как работает операционная система Android, она решает, когда нужно уничтожить ваше представление. Когда вы блокируете свой телефон, приложение переходит в состояние паузы (onPause) жизненного цикла активности. Когда активность находится в состоянии паузы, и если она занимает много памяти, система имеет права убить ваше приложение (onStop then onDestroy). Поэтому, когда вы ее разблокируете, системные вызовы (onCreate) воссоздают ваше представление.

Решение:

  • Вы должны внимательно сохранить и проверить состояние, используя onSaveInstanceState() ИЛИ
  • Используйте android:configChanges="orientation|screenSize" для вашего тега активности в манифесте.