Прежде всего, проверьте мой пост о сохраненных фрагментах. Это может помочь.
Теперь, чтобы ответить на ваши вопросы:
Сохраняет ли фрагмент также свое состояние просмотра , или это будет воссоздано при изменении конфигурации - что именно «сохраняется»?
Да, Fragment
состояние будет сохраняться при изменении конфигурации. В частности, «сохраняется» означает, что фрагмент не будет уничтожен при изменении конфигурации. То есть, оно Fragment
будет сохранено, даже если изменение конфигурации приведет Activity
к разрушению базового объекта.
Будет ли фрагмент уничтожен, когда пользователь покинет активность?
Так же, как Activity
s, Fragment
s может быть уничтожен системой, когда ресурсы памяти невелики. Сохраните ли ваши фрагменты свое состояние экземпляра при изменениях конфигурации, это не повлияет на то, будет ли система уничтожать Fragment
s после выхода из Activity
. Если вы покинете Activity
(т. Е. Нажмете кнопку «Домой»), то Fragment
s могут быть или не быть уничтожены. Если вы покинете Activity
кнопку, нажав кнопку «назад» (таким образом, вызывая finish()
и эффективно уничтожая Activity
), все Activity
присоединенные Fragment
файлы также будут уничтожены.
Почему он не работает с фрагментами на заднем стеке?
Вероятно, существует несколько причин, по которым он не поддерживается, но наиболее очевидная причина для меня заключается в том, что команда Activity
содержит ссылку на backstack FragmentManager
и FragmentManager
управляет им. То есть, независимо от того, хотите ли вы сохранить свои Fragment
или нет, Activity
(и, следовательно FragmentManager
, обратный стек) будет уничтожен при изменении конфигурации. Другая причина, по которой это может не сработать, заключается в том, что все может стать сложнее, если разрешить существование как сохраненных фрагментов, так и не сохраненных фрагментов в одном и том же backstack.
В каких случаях имеет смысл использовать этот метод?
Сохраненные фрагменты могут быть весьма полезны для распространения информации о состоянии, особенно управления потоками, между экземплярами операций. Например, фрагмент может служить хостом для экземпляра Thread
или AsyncTask
управляющего его работой. Смотрите мой блог на эту тему для получения дополнительной информации.
В общем, я бы отнесся к этому аналогично использованию onConfigurationChanged
с Activity
... не используйте его как бандит, только потому, что вы слишком ленивы для правильной реализации / обработки изменения ориентации. Используйте его только тогда, когда вам нужно.