2014-03-04 95 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,描述他们所有。

相关问题