2011-10-22 77 views
0

我的android游戏在数组列表中保存关卡布局数据。在测试我的级别加载器时,我注意到有时候我的级别没有加载,只剩下一个黑屏。起初我以为它可能是我的纹理不重新加载,但我通过绘制一个独立于ArrayList的对象来证明这是错误的,它画得很好。接下来我使用Log标签来检查我的ArrayList的大小。只要我按下家中,然后重新打开我的应用程序,Log标签开始返回零大小,这意味着我的所有数据都已丢失。现在我真的不想在每次调用onPause时从文件中加载我的级别数据,那么是否有办法保留ArrayList中保存的数据?ArrayList在暂停时不保存

回答

1

问题是你可能正在收集垃圾(即你暂停正在因为内存问题而变成销毁)。在您的活动中实施onSaveIntstanceStateonRestoreInstanceState方法以查看是否解决了问题。

Num1在评论中提出了一个很好的观点,我觉得值得指出。请注意,bundle应该包含少量的数据。如果你的ArrayList很大,这可能就是你的活动在同一个地方被垃圾收集的原因。如果是这样的话,你有两种选择之一。将数据明确地存储在onDestroy方法的磁盘上(这种方式只在需要时执行,写入磁盘可能需要一段时间),或者在活动重新聚焦时重新计算这些内容。这只是一件好事情要考虑的事情。

+0

任何特别的东西我必须做的,以便从捆绑中取回或在应用程序恢复时它会在那里 – Jack

+0

查看我的更新回答 –

+0

我在猜测捆绑包本身会在某个时候遭到破坏,但我是对的认为如果发生这种情况,onCreate会再次被调用? – Jack