这是我的第一篇文章。我会尽量让它尽可能好。我正在开发一个简单的游戏,其中我使用 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 中有几个持久性选项,您应该选择一个最适合您的用例的选项。这里有一个很好的文档,描述了所有这些。