2010-11-10 105 views
19

當我按下Droid上的睡眠按鈕時,我的活動的oncreate被調用。爲什麼會發生?爲什麼操作系統要在設備進入睡眠狀態時調用OnCreate?有什麼辦法可以阻止它,或者至少知道這是因爲手機進入了睡眠狀態?當手機進入睡眠狀態時,OnCreate調用

+1

由於方向更改,您確定您的應用程序未重新啓動? – 2010-11-10 20:26:40

+0

不是。這發生在手機完全靜止在我的桌子上。當我按下睡眠按鈕時,會調用onDestroy,然後以某種方式開始新的活動。 – iterator 2010-11-10 20:41:53

+0

我應該指出,它在重新啓動時傳遞了一個有效的savedInstanceState。 – iterator 2010-11-10 20:42:58

回答

22

這種情況特別發生在鎖定旋轉的活動中,例如,有這樣的活動標籤內的清單:

android:screenOrientation="portrait" 

當你關閉屏幕時,它讀取加速計確定關閉前的真正方向和改變了這一點。

所以,是的,簡單的解決方案是增加configChanges爲好,使得它看起來是這樣的:

<activity 
    android:name=".MyActivity" 
    android:screenOrientation="landscape" 
    android:configChanges="orientation" 
/> 

你不需要指示screenOrientation,但如果你不這樣做是什麼方向在什麼時候啓動它將停留在哪裏,除非你編寫代碼來處理配置更改。

作爲一個方面說明,當我開始在ICS上測試我的應用程序時,我不得不在一些活動開始時處理一些創建/銷燬/創建週期的怪癖。必須進行一些額外的檢查和平衡才能使代碼具有通用性。

+0

關於ICS如何工作,您還有更多的信息嗎?在運行2.3.3和4.0.4的設備上遇到此問題。您的解決方案適用於我的2.3.3設備,但onCreate()在睡眠4.0.4後仍然被調用。 – 2013-06-04 12:51:43

+0

問題可能是設備對鎖定屏幕有硬編碼的方向。要測試這一點,請將鎖定方向設置爲相反方向(可能爲人像)。這可能會讓額外的onCreate消失,併爲您找到如何消除不相關的定位更改的出發點。 – ProjectJourneyman 2013-06-09 17:37:49

+8

謝謝。你是對的。我發現了一個解決方案,通過將screenSize添加到configChanges中,比如'android:configChanges =「orientation | screenSize」'。從文檔:「注意:如果您的應用程序的目標API級別爲13或更高(由minSdkVersion和targetSdkVersion屬性聲明),則還應該聲明」screenSize「配置,因爲當設備在縱向和橫向之間切換時它也會發生更改方向「。 – 2013-06-11 09:08:24

8

我有相同的概率,只要它來自睡眠

這裏我做了什麼來解決這個問題

我的應用程序(遊戲)重載我添加

<activity 
    android:configChanges="orientation|screenSize" 
/> 

希望這會幫助別人!

+0

這對我有用。謝謝 – RJB 2017-04-22 20:42:04

相關問題