У меня есть активность, которая должна включать экран при запуске (на случай, если экран был выключен). Итак, в моем onCreate
у меня есть:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
|WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
|WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
|WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
Используя эту простую комбинацию, я могу отображать свою активность всякий раз, когда она запускается из моей фоновой службы (да, это законный случай).
Проблема, однако, в том, что в таком случае происходит очень странное поведение жизненного цикла, когда я запускаю свою деятельность. Используя подробное ведение журнала, я смог выяснить, что следующий процесс из 7 шагов происходит сразупосле запуска действия:
Видишь это? Для запуска простого действия onStart вызывается дважды. И что еще более важно, onStop вызывается таинственным образом, хотя активность только началась — и не произошло ничего, что могло бы заставить ее остановиться.
Я проверил это во многих различных сценариях, и оказалось, что это странное поведение происходит только тогда, когда экран выключен, а действие запускается после его уничтожения. Если экран включен или активность была остановлена [но еще не уничтожена], активность запускается нормально, а onStart вызывается только один раз.
Итог: кажется, что когда моя активность запускается и экран принудительно включается, Android запускает активность, затем останавливает ее, а затем снова запускает без видимой причины.
Итак: почему это происходит? И есть ли что-нибудь, что я могу сделать, чтобы обойти это (чтобы onStop не вызывался, пока для этого не будет законной причины)?
Примечания:
singleTask