我有一个游戏,我在SurfaceView上绘制和移动位图。用户可以交互(拖放)这些位图。当玩家点击主页按钮然后返回游戏时,我希望能够暂停游戏,然后将其恢复到离开之前的状态。存储自定义对象的最佳方法是什么?
我应该实现onSaveInstanceState(Bundle)
并让我想要保存的对象的所有类都实现Parcelable
接口吗?这将是相当多的工作,我仍然不确定如何保存像位图这样的东西。我想我不会,我只会从磁盘重新加载。
我也对捆绑提供什么样的存储感到困惑:磁盘存储永远不会消失,除非你自己清除它,或者如果操作系统决定在后台删除你的程序,那么内存存储就会消失。根据{{3}}中的评论,它是磁盘存储。 this question意味着它是内存存储,说Note that it is important to save persistent data in onPause()
,但我不太清楚。 documentation也暗示它不是持久性的:只有应用程序保留在内存中才会持续存在。那是哪一个呢?
onRetainNonConfigurationInstance()
在应用程序处于后台时将对象保留在内存中。这意味着如果在后台运行时程序被内存占用,一切都将丢失。这似乎是大多数(我所测试的)游戏中的内容:如果你在玩游戏时回到家中然后重新进入游戏,那么关卡会重新开始。如果你回家,打开很多东西(足以让Android从内存中删除游戏),然后回去,没有任何恢复,游戏从主菜单开始。这是否意味着这就是他们使用的东西,如果是这样,那是一种好的做法吗?请注意,有关Bundle
持久性的问题只是次要的好奇心。我真的不在乎这个游戏的状态是不是永久保存的,并且在游戏暂停一段时间之后可能会丢失(如上面2
中所述)。我对这个案例的最佳实践感兴趣。
答案 0 :(得分:2)
基本思想是,IMO,确定最小的值集合,使您能够重新创建游戏的状态。将它们保存在共享首选项中。