Когда пользователь нажимает кнопку НАЗАД, ваша активность на переднем плане уничтожается. Эта активность будет вызываться с onPause()
, onStop()
и onDestroy()
. Затем этот объект активности будет собираться мусором (если только вы не внесли утечку памяти).
onSaveInstanceState()
будет вызываться периодически, если есть вероятность, что действие будет вскоре уничтожено, но таким образом, что пользователь сможет вернуться к нему. Причиной этого является изменение конфигурации, например поворот экрана.
Что вам следует делать в onPause()
, во всяком случае, сохранять данные, используя «sqlite, сохранение файлов и другие методы персистентности». Как только вызывается onPause()
, нет никаких гарантий, что это действие останется без изменений или что весь ваш процесс останется без изменений. Поэтому все, что вы цените, должно быть записано в постоянное хранилище.
«Состояние» для onSaveInstanceState()
- это то, что влияет на пользовательский интерфейс действия, но не является частью постоянной модели данных. Большая часть этого автоматически обрабатывается встроенной в Android реализацией этого метода (например, текст в EditText
), но вы можете добавить свою собственную информацию в Bundle
, если хотите. Однако ваше состояние экземпляра не является вашей моделью данных , поэтому все, что вы хотите оставить, необходимо записать в постоянное хранилище.
Если вас беспокоит производительность, вы можете кэшировать данные в статических элементах данных / синглетах, при условии, что у вас нет утечки памяти. Но, опять же, после вызова onPause()
ваш процесс может быть прерван в любой момент времени. Ваши статические данные могут быть только кешем; ваша модель данных должна быть чем-то постоянным.