这是我的第一篇文章。我会尽力让它变得更好。 我正在开发一个简单的游戏,我使用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