Android: onSaveInstanceState () и onPause ()

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

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

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

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

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

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

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

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

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

Solutions Collecting From Web of "Android: onSaveInstanceState () и onPause ()"

Из руководства разработчика по действиям :

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

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

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

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

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

JAL