2011-11-28 46 views
4

我正在記錄每個onCreate()和onDestroy()調用。我發現,當我點擊我的Android電源按鈕(和在模擬器上呢!)我的活動如何防止在Android上按下電源按鈕時調用onDestroy()後跟onCreate()

> onDestroy(); 
> onCreate(); 

殺死我的遊戲,然後立即從一開始就重新打開了電話。當然,一旦用戶解鎖屏幕,遊戲將顯示在主菜單中,並且所有進程都被終止。

是否可以重寫或禁用此行爲?

+3

你爲什麼不救的進展,你將自己(如有必要)處理的配置變化在onDestroy()方法中,並檢查onCreate()方法中保存的遊戲(並恢復進度)? – ethan

回答

10

當您按下電源按鈕時,通常會啓用屏幕鎖定。這可能會觸發當前位於前臺的活動的配置更改(屏幕鎖定通常處於縱向模式),導致其被破壞並重新創建。

聲明android:configChanges="keyboardHidden|orientation"在AndroidManifest.xml中這樣的活動可以防止它們被破壞並重新創建,但也意味着通過覆蓋onConfigurationChanged

+5

這是正確的答案!但是請注意,如果您的目標是API 13或更高,那麼按下電源按鈕也會觸發'screenSize'的更改。因此,這也需要重寫以獲得所需的行爲:android:configChanges =「keyboardHidden | orientation | screenSize」 –

+0

我沒有注意到API13的screenSize變化,補充說它解決了我的問題,謝謝。 – Vince

3

當調用onCreate()onDestroy()方法時(至少在不經歷非常多的痛苦時),您無法重寫。要做的最好的事情是弄清楚如何在被調用的範圍內工作。將您的狀態保存在onDestroy()。讓它可以讓你的應用程序容忍這個調用序列,因爲坦率地說,它應該/必須。這正是Android的工作原理。

+0

如何檢測到此通話來自電源按鈕? – PiotrK

+0

據我所知,你不能。但是沒關係,因爲最後調用onDestroy()或onCreate()並不重要,只是調用了它們。 –

相關問題