Я использую onSaveInstanceState и onRestoreInstanceState, чтобы сохранить данные моего уровня после того, как моя игра переведена в фоновый режим. Кажется, все работает нормально, но я столкнулся с постоянной проблемой при блокировке телефона с помощью кнопки питания. Вместо того, чтобы просто вызывать функцию сохранения, я также получаю вызов для восстановления в то же время, а затем еще один вызов для сохранения, затем, когда я снова разблокирую свой телефон, я получаю другой вызов для сохранения и, наконец, еще один вызов для восстановления. Я проверил свои значения, используя теги Log, и мой 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.