2012-08-10 105 views
2

我想要做的事情應該很簡單。Android避免onDestroy()與onBackPressed()

我有一款遊戲,用一個提供各種選項的屏幕啓動StartActivity,其中之一是「開始遊戲」。

當用戶選擇該選項,遊戲正確的開始代碼類似於:

Intent i = new Intent(); 
i.setClass(context, GameActivity.class); 
context.startActivity(i); 

這一切工作正常。當遊戲中按下「返回」按鈕時,控制權返回到此StartActivity。再次,這很好。

然而,按下「back」導致調用「onDestroy()」(按照文檔) - 這意味着當再次按下「開始遊戲」時,GameActivity會從頭開始。

我想要的是當按下「返回」時將GameActivity保存在內存中,以便按下「開始遊戲」返回到它已經停止的地方。

這幾乎是每一款遊戲都有的功能,所以必須非常簡單,但是我不知道如何去做。我一直試圖以回到StartActivity的方式重載onBackPressed(),但沒有成功;做這樣的事情:

public void onBackPressed() { 
    Intent i = new Intent(this, StartActivity.class); 
    startActivity(i); 
} 

意味着堆棧的增長永遠,即A - >乙 - >離開ABA,而不是僅僅A.

我知道一般的活動流(HTTP:// developer.android.com/reference/android/app/Activity.html)。

我是否以錯誤的方式啓動GameActivity?

作爲對僚機的迴應,我意識到各種活動狀態,並且如果需要釋放內存,可能會調用onDestroy()。我在onPause()上保存遊戲狀態並在onResume()上加載,但不是當時內存的完整狀態。

如果我按下「home」,應用程序被「最小化」生效,並返回到重新啓動時的位置 - onDestroy()未被調用。我試圖模擬這種行爲,但將應用程序返回到StartActivity而不是「home」。

後退按鈕總是調用onDestroy(),因爲我可以從文檔(或完成()至少)收集。

發生這種情況時,所有遊戲都會保存完整狀態嗎?我會很驚訝,但也許他們會。

回答

3

當後退按鈕被按下時,沒有活動被完全銷燬。 Android維護着一堆正在運行的活動。當用戶按下返回按鈕時,當前活動從堆棧中彈出,並顯示前一個活動。但是這個被剔除的活動並沒有被破壞,它仍然在記憶中。只有在系統內存不足時纔會銷燬它,只有這樣纔會調用onDestroy()

在你的活動由於用戶回頭而離開屏幕之前,android會調用你的活動的一些方法,你可以保存它的狀態,並在用戶再次導航到你的活動時恢復它。通過活動的生命週期的文檔和示例何去何從:http://developer.android.com/reference/android/app/Activity.html

因此,節省的onPause()onStopped()方法之一,您的遊戲活動狀態,在主菜單中,如果用戶選擇「恢復」,開始你的遊戲活動從其保存的狀態,否則如果用戶選擇「新遊戲」,則從頭開始您的遊戲活動。