Учитывая этот сценарий: если я создал действие, и он перемещается в фоновый режим, и это действие содержит 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).
Означает ли это предположение?