Учитывая этот сценарий: если я создал действие, и он перемещается в фоновый режим, и это действие содержит Fragment
, который установлен в setRetainInstance(true)
, тогда ОС Android может в какой-то момент все же решить закрыть процесс хостинга активности чтобы освободить память.
Затем состояние Activity
сохраняется через onSaveInstanceState(Bundle)
, где - насколько я понял - связанный Bundle
записывается, а в файловую систему - выходить из процесса. (таким образом, требование объектов в расслоении Serializable
). Позже состояние приложений можно получить в новом процессе через onRestoreInstanceState(Bundle)
.
Напротив, my Fragment
разрешено содержать переменные, которые не обязательно Serializable
. Поэтому, я полагал, Fragment
не может быть сохранен на диске, например, Bundle
. Итак, что происходит с моим фрагментом, когда процесс убивается?
Мне было интересно узнать это руководство разработчика (http://developer.android.com/guide/components/processes-and-threads.html):
Процесс, содержащий активность, которая в настоящее время не видна пользователю (был вызван метод onStop()). Эти процессы не оказывает прямого воздействия на пользовательский опыт, а система может их убить в любое время, чтобы вернуть память для переднего плана, видимого или служебного обработать. Обычно выполняется много фоновых процессов, поэтому они хранятся в LRU (наименее недавно использованный) список, чтобы гарантировать, что процесс, который недавно был замечен пользователем, последний должен быть убит. Если действие реализует его методы жизненного цикла правильно и сохраняет текущее состояние, а его процесс не будет оказывают заметное влияние на пользовательский интерфейс, поскольку, когда пользователь возвращается к активности, действие восстанавливает все его видимое состояние.
Я понял вышеупомянутое убийство, так что экземпляр виртуальной машины отключен, и состояние процесса записывается в файловую систему (здесь идет Bundle
в игру). Позднее пучки читаются для возобновления процесса. Поскольку удержание фрагментов не связано с методами жизненного цикла, и поскольку я не знаю, как сохранить, например, указатель на сетевое соединение (во всяком случае, у вас не должно быть такого указателя во фрагменте), мне было интересно, восстанавливаются ли фрагменты, если процесс закрыт тем временем. Я пришел к выводу, что их обязательно нужно воссоздать, и поэтому методы жизненного цикла, по возможности, предпочтительнее setRetainInstance(true)
.
Означает ли это предположение?