Подтвердить что ты не робот

OnSaveInstanceState() и onPause()

Я немного запутался в этих двух методах в Android.

Из документации я понимаю, что onSaveInstanceState() следует вызывать для хранения только временной информации, а onPause() следует использовать для хранения любых постоянных данных.

Мне было интересно, почему вызывать onSaveInstance() вообще, когда onPause() вызывается каждый раз. Затем я прочитал в учебнике Notepad:

"Обратите внимание, что saveState() должно быть вызываемый как в onSaveInstanceState()и onPause(), чтобы данные сохраняются. Это потому, что не гарантирует, что onSaveInstanceState() будет называться и потому что, когда это называется, это вызывается перед onPause()."

Нет гарантии, что onSaveInstanceState() будет вызван, потому что вы можете просто выйти из операции с помощью кнопки "Назад".

Но в соответствии с этим, если вы не сохраните постоянные данные внутри обоих методов, приложение может быть убито, а внутри onSaveInstanceState().

Итак, нам нужно сохранить постоянные данные в обоих методах на самом деле, правильно?

Но если это правда, не слишком ли это связано с накладными расходами, и, возможно, должен быть какой-то другой дополнительный флаг, чтобы сказать, называется ли этот метод или что-то еще?

http://developer.android.com/resources/tutorials/notepad/notepad-ex3.html

4b9b3361

Ответ 1

Из руководства разработчика по activities:

Примечание. Поскольку onSaveInstanceState() не может быть вызван, вы должны использовать его только для записи состояния переходного состояния(состояние пользовательского интерфейса) - вы никогда не должны использовать его для хранения постоянных данные. Вместо этого вы должны использовать onPause() для хранения постоянных данных (таких как данные, которые должны быть сохранены в базе данных), когда пользователь покидает деятельность.

Ответ 2

onSaveInstanceState() предназначен для "запоминания" текущего состояния, когда происходит изменение конфигурации, например, изменение ориентации экрана. Это не предназначено для "долговременного сохранения".

В примере с блокнотом это может быть одинаковым в обоих случаях. В других приложениях, например, например, клиент Twitter, сами данные могут сохраняться в фоновом режиме. В onCreate() некоторые элементы извлекаются из БД и отображаются и, например, текущая позиция запоминается. Когда происходит изменение ориентации, эту "текущую позицию" можно запомнить в onSaveInstanceState(), а затем в onCreate() после изменения ориентации, чтобы отобразить сообщение, на которое последний раз смотрел пользователь.

См. также это руководство.

Ответ 3

Вы можете сохранить состояние экземпляра без просмотра ( "внутреннее состояние, например, предпочтения пользователя" ), при мягком убийстве (изменение ориентации) в onSaveInstanceState с помощью пачек и на жестком удалении (кнопка "назад", когда мы находимся в фокусе) в onStop с использованием настроек. Если у вас есть другие данные ( "общие данные типа документа, обычно хранящиеся в базе данных SQLite с использованием поставщика контента" ), вы должны сделать это в onPause.