存储到磁盘或内存的序列化对象



这是我的第一篇文章。我会尽量让它尽可能好。我正在开发一个简单的游戏,其中我使用 Serializable 来保持游戏的状态在纵向和 Lanscape 切换上。这工作正常,但现在我想在我的菜单活动(SplashScreen.java)中添加一个"恢复游戏"按钮。

我的第一个问题是;即使在游戏关闭并重新启动后,我是否可以使用相同的 allready 序列化对象来恢复游戏?换句话说,保存的状态会在 finish() 丢失吗?有三个类 主活动,启动画面(菜单),板(对象)

第二个问题:如何使用按钮从菜单中获取最后一个状态?

在我的主活动中.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;
...
... }

首先,在性能方面,最好使用 Parcelable 而不是 Serializable ,因此请尝试使您的实体Parcelable。这是指向文档的链接,该文档还提供了使类Parcelable的简单示例。

其次,Android 中有几个持久性选项,您应该选择一个最适合您的用例的选项。这里有一个很好的文档,描述了所有这些。

最新更新