【发布时间】:2011-10-23 07:41:08
【问题描述】:
我正在使用 onSaveInstanceState 和 onRestoreInstanceState 在我的游戏进入后台后保存我的关卡数据。一切似乎都很好,但是当您使用电源按钮锁定手机时,我遇到了一个一致的问题。除了调用保存之外,我还同时接到了一个恢复电话,然后又接到了另一个电话来保存,然后当我再次解锁手机时,我又接到了另一个电话来保存,最后又接到了另一个电话来恢复。我已经使用日志标签检查了我的值,并且我的 ArrayList 第一次返回为空是在我锁定手机后第二次调用保存之后。这是我的堆栈跟踪:
//Locks Phone
10-23 08:34:03.797: DEBUG/input(6535): saveLevel[001, 001, 001, 001, 001, 001, 001, 000, 000, 000, 000, 001, 000, 001, 001, 001, 001, 000, 000, 000, 000, 000, 000, 000, 001, 001, 001, 001, 001, 001, 000, 000, 000, 001, 000, 001, 001, 001, 001, 001, 001, 001, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000]
10-23 08:34:04.813: DEBUG/input(6535): RestoredLevel[001, 001, 001, 001, 001, 001, 001, 000, 000, 000, 000, 001, 000, 001, 001, 001, 001, 000, 000, 000, 000, 000, 000, 000, 001, 001, 001, 001, 001, 001, 000, 000, 000, 001, 000, 001, 001, 001, 001, 001, 001, 001, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000]
10-23 08:34:05.602: DEBUG/input(6535): saveLevel[]
//Unlocks Phone
10-23 08:34:14.656: DEBUG/input(6535): saveLevel[]
10-23 08:34:14.836: DEBUG/input(6535): RestoredLevel[]
当我以其他方式退出应用程序时,不会发生同样的事情。
这是我的 onSave 和 OnRestore 方法:
@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
levelDat = CSVReader.getleveldat(); //CSVReader is the class that creates the ArrayList
outState.putStringArrayList("LEVELDATA", levelDat);
Log.d(TAG, "saveLevel" + String.valueOf(levelDat));
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
levelDat = savedInstanceState.getStringArrayList("LEVELDATA");
MRenderer.recoverLevel(); // just a method to force update my level data in my renderer.
Log.d(TAG, "RestoredLevel" + String.valueOf(levelDat));
}
有没有办法阻止这种情况发生,如果没有,我可以提供一些提示来帮助我让我的代码识别丢失的数据并重新读取 CSV 文件。
【问题讨论】:
标签: android opengl-es arraylist save restore