2012-02-08 4 views
3

Я пытаюсь реализовать функцию «резюме» для игры, которую я разрабатываю. Он должен работать следующим образом:android сохранить состояние игры в onPause или onDestroy?

  • Если пользователь начинает игру, а затем закрывает игру с финишем, состояние игры сохраняется. При открытии приложения снова появится опция «возобновить».

  • Если действие приостановлено (например, сведено к минимуму из-за телефонного звонка), и пользователь возвращается, он должен показать игру в процессе. Он не должен прекращать и сохранять состояние, если, конечно, ОС не решит убить эту деятельность.

Я решил использовать SharedPreferences по большей части, а также специальный файл для сохранения дополнительной информации. Я видел, как многие люди рекомендуют сохранять состояние программы в методе onPause(), и мне было интересно, почему это так.

Из чего я могу собрать, используя OnDestroy() было бы лучше. onPause() не означает, что активность будет убита, поэтому я могу тратить время на сохранение состояния игры обязательно. Я проверил свою программу, и onDestroy() вызывается в соответствующее время. Поэтому я предполагаю, что у меня нет утечки, чтобы эта деятельность не была уничтожена.

Несмотря на это, я не могу найти нигде, рекомендую сохранить состояние в onDestroy(), и все, кажется, рекомендуют использовать . Я пропустил здесь часть информации?

ответ

5

Несмотря на это, я не могу найти нигде, рекомендую сохранить состояние в onDestroy(), и все, кажется, рекомендуют использовать onPause. Я пропустил здесь часть информации?

Вы: :). onDestroy() не гарантируется. См the documentation для него:

Примечание: не рассчитывайте на этот метод называют в качестве места для сохранения данных! Например, если действие редактирует данные в поставщике контента, эти изменения должны быть зафиксированы либо в onPause(), либо в onSaveInstanceState (Bundle), но не здесь. Этот метод обычно применяется для освобождения ресурсов, таких как потоки, связанные с активностью, так что уничтоженное действие не оставляет таких вещей, пока остальная часть его приложения все еще работает. Бывают ситуации, когда система просто убивает процесс хостинга активности, не вызывая этот метод (или любые другие) в нем, поэтому его нельзя использовать для выполнения действий, которые должны оставаться вокруг после завершения процесса.

+0

Спасибо Брайан. Я чувствую себя глупо, не проверяя документацию! похоже, что это onPause() тогда :) –

+0

Не беспокойтесь, удачи. –

Смежные вопросы