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