所以我正在開發這個小遊戲,它目前使用2個活動: 菜單活動和實際的遊戲活動; 的遊戲活動是由菜單活動開始(當時沒有任何問題)在Android中的現有活動之間切換
然後,我可以從遊戲活動的菜單活動使用後退按鍵開關:
public void onBackPressed() {
super.onBackPressed();
}
現在我回來菜單活動。我創建的遊戲活動已停止(我猜); 我如何返回遊戲活動,因爲我離開了它(我該如何重新啓動它)?
所以我正在開發這個小遊戲,它目前使用2個活動: 菜單活動和實際的遊戲活動; 的遊戲活動是由菜單活動開始(當時沒有任何問題)在Android中的現有活動之間切換
然後,我可以從遊戲活動的菜單活動使用後退按鍵開關:
public void onBackPressed() {
super.onBackPressed();
}
現在我回來菜單活動。我創建的遊戲活動已停止(我猜); 我如何返回遊戲活動,因爲我離開了它(我該如何重新啓動它)?
重寫僅用於調用super的方法是毫無意義的。請重新檢查重寫的含義:如果您不覆蓋,那麼您的子類方法A將與超類方法A相同。因此,您可以重寫以在您的子類中創建不同版本的A,但不能調用超類方法A,它是無用的。
關於Activity,在android中,你不能希望保存不在棧上的活動。您可以添加到您的清單:
<activity name=".GameActivity"
...
android:launchMode="singleTop" />
,但即便如此,它不能保證Android將只是清理你的活動,並重新創建它時,它被重新啓動。這就是android保留資源的方式。
但更好的方法是再次從GameActivity中調用(startActivity)MenuActivity。這樣,您的舊GameActivity仍然會在活動堆棧中。但是,真的,在Android將會重新創建GameActivity的過程中總會遇到一些限制。例如,如果系統受到內存壓力。
最好的是堅持GameActivity的狀態,以便即使一個新的實例將被重新放入與舊實例相同的狀態。
假設您將菜單用作後退按鈕暫停遊戲的「暫停」菜單,您可以讓後退按鈕爲菜單活動創建新的意圖,然後讓菜單活動中的後退按鈕功能正常。
當然,當你啓動菜單活動時,你仍然應該保存遊戲數據 - 因爲用戶可以從菜單中關閉屏幕 - 但是當你啓動遊戲時,系統會固有地保持你的遊戲活動(和數據)菜單。
@Override
public void onBackPressed() {
Intent intent = new Intent(GameActivity.this, MenuActivity.class);
startActivity(intent);
}
您需要使用Data Storage中描述的任何方法手動保存遊戲狀態。
但是如果啓動菜單活動的新副本:
Menu Activity ->
Game Activity ->
Menu Activity
您可以返回到遊戲活動,而不是完全重建它。但是,當然,不能保證遊戲活動不會被垃圾收集器破壞,所以您仍然需要將遊戲狀態保存在onPause()
中。
感謝您指出最重要的問題,這確實是愚蠢的。所以我想我會保存遊戲數據並重新創建遊戲活動。 – ianos