我有一個活動,需要在啓動時打開屏幕(以防萬一屏幕關閉)。所以在我的onCreate
,我有:爲什麼在我的活動啓動後,onStop被立即調用?
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 - 我曾嘗試禁用鍵盤鎖/鎖,但它沒有任何效果
- 我看到在這個行爲運行Android 3.2的三星Galaxy Tab 10.1。我沒有測試過這是否適用於其他任何東西...
當活動需要旋轉時,我有類似的行爲。在我的情況下,AndroidManifest中的活動有一個未指定的方向。在onCreate期間,我根據狀態機設置方向。當我設定的方向不是當前的方向時,意味着活動需要旋轉,我會看到你描述的怪異生命週期。你找到答案了嗎? – kingston
我也檢查過onPostResume是在onPause之前調用的。 – kingston
此處描述的解決方案適用於我: [開始活動後立即調用OnPause和OnStop()](http://stackoverflow.com/questions/25369909/onpause-and-onstop-called-immediately-after-starting-activity ) – cyberhuman