我想知道其他人在 Android 上保存文件时使用什么策略来避免数据丢失。我有几个游戏应用程序,本质上,它们可能会在用户暂停时保存游戏状态/保存游戏(onPause)。
这在 99.99% 的情况下都有效,但每隔一段时间我都会收到一个保存过程出错的保存游戏示例。通常,这是一个格式错误的 XML 文件,通常在某个任意点被截断。根据我收到的错误报告,我认为问题主要发生在用户在游戏过程中被电话或类似的东西打断,然后 Android 操作系统在应用程序完成保存之前将其杀死。保存文件的代码非常简单,所以我很难看出还有什么可能导致这个问题。
这是一个严重的问题,因为它通常会导致玩家的保存进度被破坏。
我想先写入一个空文件,然后再复制到“真实”文件,但我怀疑这只会增加问题,因为它总体上需要更多时间并且仍然有被中断的风险。
有谁有安全的方式来做到这一点,Android 相对保证不会搞砸?
如此总结,到目前为止建议的选项(据我了解):
- 为保存过程使用服务,假设这不太可能被操作系统杀死。
- 保存在临时文件中;验证保存后复制。
- 游戏状态的增量保存(我实际上已经将它用于玩家日志信息)。
- 2和3的组合。
- 将保存移到另一个线程,因为问题可能与 ANR 杀死 [DC 的评论如下]有关。
我认为 SharedPreferences 不适用于这种结构化数据,目前,这些方法似乎都不是理想的解决方案,所以我仍然愿意接受建议。
我还没有设法测试所有这些方法,因此我没有浪费赏金,而是将其分配给我认为最有可能解决问题的答案。不过,在接受答案之前,我仍计划检查各种选项。感谢所有好的建议。