2014-09-01 12 views
0

去這個問題的 android save game state in onPause or onDestroy?我們如何保證onPause會被調用?

答案強調,問這個問題的人應該保存的onPause比賽狀態,因爲的onDestroy文件說,「在有些情況下,系統簡單地殺死活動的託管過程中無需調用此方法(或其他任何東西),所以它不應該被用來做這些事情,在這個過程結束之後,它們會保留下來。「在這些情況下,我們如何確保onPause被調用?是否有可能控制在這些情況下調用哪些方法?似乎不可預知

+0

這記錄在[活動生命週期](http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle)中。 – 2014-09-01 07:54:21

回答

-3

您可以顯示用戶的對話框以相應地執行操作。當打開對話框詢問用戶他是否要退出時,Activity肯定會調用onPause(),此時您可以編寫遊戲狀態保存碼。最好在onPause()上編寫代碼,因爲onDestroy()資源被os釋放。

2

您應該保存在onSaveInstanceState()臨時實例的狀態。該方法接收Bundle參數,您可以使用該參數將狀態寫入。當您的應用重新啓動時,Bundle然後發送到onCreate()

如果您需要更持久地保存實例狀態,請將其保存到數據庫或SharedPreferences中。根據http://developer.android.com/training/basics/activity-lifecycle/stopping.html,您應該使用onStop()更多CPU密集型操作,而不是onPause()。我不認爲你需要擔心在正常使用情況下調用onPause()。據我所知,這是有保證的。 (當然,總會有災難性的故障,比如用戶拔出設備的電池,但是你可以做的並不多。)

0

幾乎可以肯定的是,onPause()總是會被調用。原因在於「系統」極不可能主動殺死一個活躍的(即可見的)Activity

爲了釋放資源,Android操作系統有效地保留了殺死休眠進程的權利 - 特別是那些長期運行但最近未使用的進程。爲了使您的Activity(及其過程)符合此條件,您必須在某個時間點將Activity發送到背景狀態,例如按下HOME或啓動其他應用的Activity。您的Activity不再可見的簡單事實意味着它將被暫停,並且onPause()將被調用。幾乎可以肯定,Activity將被停止,並且onStop()也將被調用。

你必須記住的是,Android已經存在了一段時間,早期的設備具有以100 MB爲單位測量的RAM,系統行爲可能性和文檔反映了這一點。更新的設備具有以GB(甚至10 GB)爲單位的內存(RAM),因此除非用戶真的將其設備推向了資源的限制,否則積極清理應用程序流程變得不太可能。

相關問題