Когда я блокирую экран, пока мое приложение работает "сверху", система вызывает почти сразу onCreate (экран все еще черный). Что может быть причиной такого деструктивного поведения?
Android 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"
для вашего тега активности в манифесте.