我一直在研究在转弯之间保存游戏数据的替代方法,并想知道是否有人可以指出我正确的方向.
我有大约32k的数据,必须在onPause期间保存.由于数据量巨大,我排除了偏好.我花了几天时间玩SQLite,却无法在不到两秒的时间内获得数据保存(虽然时间肯定没有浪费).
我决定在游戏开始时使用数据库加载常量数据.这肯定会更容易调整游戏中的各种参数和默认值.但这仍然让我寻找理想的数据写入方法.
需要保存的数据基本上是9次出现A类,9次出现B类.我是Android学习曲线的密集月份(以及Java的细微差别,来自C++背景)并且一直在谷歌搜索疯了一样.这带来了两种可能性 -
1)序列化(ObjectOutputStream)
我认为这将是一个完美的解决方案,但是,在阅读了有关该主题的其他几篇文章之后,由于速度和内存分配导致垃圾收集器陷入潜在的愤怒,因此不会强烈建议在Android平台上使用它.
2)DataOutputStream类
我目前的想法是向两个类添加加载和保存函数,并使用其中的DataOutputStream和DataInputStream调用分别写入和读取数据.
类中的数据是基元(主要是字符串和整数)和基元数组,因此没有什么太复杂可以分解.这第二个解决方案看起来是一个好的,可行的吗?或者还有其他解决方案我还没有意识到吗?
您应该使用异步任务来保存数据,我使用此方法在开始游戏时获取高分:
new HighscoreTask().execute(this);
Run Code Online (Sandbox Code Playgroud)
异步任务如下所示:
public class HighscoreTask extends AsyncTask<MainView, Void, Void> {
protected void onPreExecute() {
}
protected void onPostExecute(final Void unused) {
}
@Override
protected Void doInBackground(MainView... params) {
HighScoreFactory.syncScores();
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
所有数据库交互都发生在HighScoreFactory.syncScores()中,这可能需要所需的时间,因为它发生在后台。在我的例子中,它向外部服务器发送 HTTP 请求并将其加载到数据库中。它从未引起任何问题并且工作顺利。