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