Перш за все, перегляньте мій пост про збережені фрагменти. Це може допомогти.
Тепер, щоб відповісти на ваші запитання:
Чи зберігає фрагмент також стан перегляду , чи це буде відтворено при зміні конфігурації - що саме "зберігається"?
Так, Fragmentстан буде збережено протягом зміни конфігурації. Зокрема, "збережено" означає, що фрагмент не буде знищений при зміні конфігурації. Тобто, Fragmentзаповіт буде збережено, навіть якщо зміна конфігурації призведе Activityдо знищення основи .
Чи буде зруйнований фрагмент, коли користувач покине діяльність?
Так само, як Activitys, Fragments може бути знищена системою, коли ресурсів пам’яті мало. Незалежно від того, чи зберігають у вас фрагменти стану екземпляра через зміни конфігурації, це ніяк не вплине на те, знищить систему чи ні, як Fragmentтільки ви вийдете з Activity. Якщо ви залишите Activity(тобто, натиснувши кнопку додому), Fragments може бути знищений або не може. Якщо ви покинете кнопку Activity, натиснувши кнопку "назад" (таким чином, викликаючи finish()та ефективно знищуючи Activity), усі Activityприєднані Fragments також будуть знищені.
Чому це не працює з фрагментами на задній стеці?
Ймовірно, є кілька причин, чому це не підтримується, але найбільш очевидною причиною для мене є те, що Activityутримується посилання на FragmentManagerта FragmentManagerкерує backstack. Тобто, незалежно від того, чи захочете ви зберегти свій Fragments чи ні, Activity(і, таким чином FragmentManager, backstack) буде знищено при зміні конфігурації. Ще одна причина, по якій це може не спрацювати, полягає в тому, що речі можуть стати складними, якщо як збережені фрагменти, так і не збережені фрагменти дозволили існувати на одній задній кулі.
Які випадки використання мають сенс використовувати цей метод?
Збережені фрагменти можуть бути дуже корисними для розповсюдження інформації про стан - особливо управління потоками - через випадки діяльності. Наприклад, фрагмент може слугувати хостом для екземпляра Threadабо AsyncTaskкерувати його роботою. Докладнішу інформацію див. У моєму блозі на цю тему.
Взагалі, я б ставився до цього аналогічно до використання onConfigurationChangedз Activity... не використовуйте його як бандаїд тільки тому, що ви занадто ледачий, щоб правильно / керувати зміною орієнтації правильно. Використовуйте його лише тоді, коли вам потрібно.