Почему onStop вызывается сразу после запуска Activity?

У меня есть активность, которая должна включать экран при запуске (на случай, если экран был выключен). Итак, в моем 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 шагов происходит сразупосле запуска действия:

  1. onCreate
  2. onStart
  3. onResume
  4. onPause
  5. onStop
  6. onStart
  7. onResume

Видишь это? Для запуска простого действия onStart вызывается дважды. И что еще более важно, onStop вызывается таинственным образом, хотя активность только началась — и не произошло ничего, что могло бы заставить ее остановиться.

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

Итог: кажется, что когда моя активность запускается и экран принудительно включается, Android запускает активность, затем останавливает ее, а затем снова запускает без видимой причины.

Итак: почему это происходит? И есть ли что-нибудь, что я могу сделать, чтобы обойти это (чтобы onStop не вызывался, пока для этого не будет законной причины)?


Примечания:

  • Данная активность использует режим запуска singleTask
  • Я пытался отключить блокировку/блокировку клавиатуры, но это не дало результата
  • Я наблюдаю такое поведение на Samsung Galaxy Tab 10.1 под управлением Android 3.2. Я не проверял, применимо ли это к чему-либо еще...
11
задан yydl 31 May 2012 в 07:13
поделиться