2014-03-04 128 views
0

這是我的第一篇文章。我會盡力讓它變得更好。 我正在開發一個簡單的遊戲,我使用Serializable來保持肖像和Lanscape切換的遊戲狀態。這工作正常,但現在我想在我的菜單活動(SplashScreen.java)中添加一個「恢復遊戲」按鈕。序列化對象是否存儲在磁盤或內存中?

我的第一個問題是;即使在遊戲關閉並重新啓動後,是否可以使用相同的已準備好序列化的對象來恢復我的遊戲?換句話說,在finish()中保存的狀態會丟失嗎? 有三個類MainActivity,SplashScreen(menu),Board(object)

第二個問題:如何從我的菜單中使用按鈕拾取最後一個狀態?

在我MainActivity.java我有這樣的:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putSerializable("board", board); 
    outState.putSerializable("moveCounter", moveCounter); 
} 

// When onCreate is called, bring back saved state if any 
@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    if (savedInstanceState != null) { 
     Board oldState = (Board) savedInstanceState 
       .getSerializable("board"); 
     int oldMoveCounter = savedInstanceState.getInt("moveCounter"); 
     if (oldState != null) { 
      board = oldState; 
      moveCounter = oldMoveCounter; 
     } 
    } 

在我的對象類Board.java我有這樣的:

public class Board implements Serializable { 
private static final long serialVersionUID = 4416703215631262818L; 
... 
... } 
+2

'SharedPreferences'是你需要的。序列化對象可能存在或不存在於磁盤上(發生在比Dalvik VM中的應用程序級別更低的級別),但肯定不應該用於在應用程序實例之間持久保留狀態。然而,你可以寫一個序列化的對象到你自己的文件,但是爲什麼'SharedPreference'需要照顧它呢? – Simon

+0

我明白了,那是我的另一個計劃。看起來我無法回收那段代碼。這將是爲我學習SharedPreferences的好機會。謝謝西蒙 – Pacman

+0

不管你使用的是可序列化還是可分解的,既不自動保存。它只是意味着它可以轉換爲二進制(單字節數組),並從相同的位置重建,這是保存它的前提條件。 – NameSpace

回答

0

首先,性能方面它是更好地請使用Parcelable而不是Serializable,因此請嘗試使您的實體Parcelable。這裏有一個link的文檔,它也提供了一個簡單的例子,使類Parcelable

其次,在Android中有幾個持久性選項,你應該選擇一個最適合你的用例。這是一個good document,描述他們所有。

相關問題