序列化对象是存储到磁盘还是内存?

时间:2014-03-04 14:35:19

标签: java android serialization

这是我的第一篇文章。我会努力使它尽可能好。 我正在开发一个简单的游戏,我正在使用Serializable来保持Portrait和Lanscape切换的游戏状态。这很好但现在我想在我的菜单活动(SplashScreen.java)中添加一个“恢复游戏”按钮。

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

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

在我的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;
...
... }

1 个答案:

答案 0 :(得分:0)

首先,在性能方面,最好使用Parcelable代替Serializable,因此请尝试制作实体Parcelable。这里是文档的link,它还提供了一个创建类Parcelable的简单示例。

其次,Android中有几个持久性选项,您应该选择最适合您用例的选项。这里有一个good document来描述它们。