2013-01-01 46 views
2

所以我正在開發這個小遊戲,它目前使用2個活動: 菜單活動和實際的遊戲活動; 的遊戲活動是由菜單活動開始(當時沒有任何問題)在Android中的現有活動之間切換

然後,我可以從遊戲活動的菜單活動使用後退按鍵開關:

public void onBackPressed() { 
    super.onBackPressed(); 
} 

現在我回來菜單活動。我創建的遊戲活動已停止(我猜); 我如何返回遊戲活動,因爲我離開了它(我該如何重新啓動它)?

回答

0

重寫僅用於調用super的方法是毫無意義的。請重新檢查重寫的含義:如果您不覆蓋,那麼您的子類方法A將與超類方法A相同。因此,您可以重寫以在您的子類中創建不同版本的A,但不能調用超類方法A,它是無用的。

關於Activity,在android中,你不能希望保存不在棧上的活動。您可以添加到您的清單:

<activity name=".GameActivity" 
    ... 
    android:launchMode="singleTop" /> 

,但即便如此,它不能保證Android將只是清理你的活動,並重新創建它時,它被重新啓動。這就是android保留資源的方式。

但更好的方法是再次從GameActivity中調用(startActivity)MenuActivity。這樣,您的舊GameActivity仍然會在活動堆棧中。但是,真的,在Android將會重新創建GameActivity的過程中總會遇到一些限制。例如,如果系統受到內存壓力。

最好的是堅持GameActivity的狀態,以便即使一個新的實例將被重新放入與舊實例相同的狀態。

+0

感謝您指出最重要的問題,這確實是愚蠢的。所以我想我會保存遊戲數據並重新創建遊戲活動。 – ianos

0

假設您將菜單用作後退按鈕暫停遊戲的「暫停」菜單,您可以讓後退按鈕爲菜單活動創建新的意圖,然後讓菜單活動中的後退按鈕功能正常。

當然,當你啓動菜單活動時,你仍然應該保存遊戲數據 - 因爲用戶可以從菜單中關閉屏幕 - 但是當你啓動遊戲時,系統會固有地保持你的遊戲活動(和數據)菜單。

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(GameActivity.this, MenuActivity.class); 
    startActivity(intent); 
} 
1

您需要使用Data Storage中描述的任何方法手動保存遊戲狀態。

但是如果啓動菜單活動的新副本:

Menu Activity -> 
    Game Activity -> 
     Menu Activity 

您可以返回到遊戲活動,而不是完全重建它。但是,當然,不能保證遊戲活動不會被垃圾收集器破壞,所以您仍然需要將遊戲狀態保存在onPause()中。