У меня есть активность, которая должна включать экран при запуске (на всякий случай, когда экран был выключен). Итак, в моем 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 шагов происходит сразу после запуска активности:
- OnCreate
- OnStart
- onResume
- OnPause
- OnStop
- OnStart
- onResume
Видишь? Для простого запуска активности onStart вызывается дважды. И что еще более важно, onStop загадочно называется, хотя активность была только начата - и ничего не произошло, что могло бы остановить ее.
Я тестировал это во многих разных сценариях, и кажется, что это странное поведение происходит только тогда, когда экран выключен и активность запускается после его уничтожения. Если экран включен, или если действие было остановлено [но еще не уничтожено], активность запускается нормально, а onStart вызывается только один раз.
Нижняя строка. Похоже, что когда моя активность запущена и экран активирован, Android запускает действие, затем останавливает его, а затем запускает его снова без видимых причин.
Итак: почему это происходит? И есть ли что-нибудь, что я могу сделать, чтобы обойти это (чтобы onStop не вызывался до тех пор, пока не будет законной причины для этого)?
Примечания:
- В рассматриваемой деятельности используется
singleTask
launchmode - Я попытался отключить keyguard/lock, но он не имеет эффекта
- Я наблюдаю это поведение на Samsung Galaxy Tab 10.1 под управлением Android 3.2. Я не проверял, распространяется ли это на что-либо еще...