這是我的第一篇文章。我會盡力讓它變得更好。 我正在開發一個簡單的遊戲,我使用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;
...
... }
'SharedPreferences'是你需要的。序列化對象可能存在或不存在於磁盤上(發生在比Dalvik VM中的應用程序級別更低的級別),但肯定不應該用於在應用程序實例之間持久保留狀態。然而,你可以寫一個序列化的對象到你自己的文件,但是爲什麼'SharedPreference'需要照顧它呢? – Simon
我明白了,那是我的另一個計劃。看起來我無法回收那段代碼。這將是爲我學習SharedPreferences的好機會。謝謝西蒙 – Pacman
不管你使用的是可序列化還是可分解的,既不自動保存。它只是意味着它可以轉換爲二進制(單字節數組),並從相同的位置重建,這是保存它的前提條件。 – NameSpace