Przede wszystkim sprawdź mój post na temat zachowanych fragmentów. To może pomóc.
Teraz, aby odpowiedzieć na twoje pytania:
Czy fragment zachowuje również stan widoku , czy też zostanie odtworzony po zmianie konfiguracji - co dokładnie jest „zachowane”?
Tak, Fragmentstan zostanie zachowany podczas zmiany konfiguracji. W szczególności „zachowane” oznacza, że fragment nie zostanie zniszczony w wyniku zmian konfiguracji. Oznacza to, że Fragmentzostaną zachowane, nawet jeśli zmiana konfiguracji spowoduje Activityzniszczenie instrumentu bazowego .
Czy fragment zostanie zniszczony, gdy użytkownik opuści działanie?
Podobnie jak Activitys, Fragments może zostać zniszczony przez system, gdy zasoby pamięci są niskie. To, czy Twoje fragmenty zachowają stan instancji w trakcie zmian konfiguracji, nie będzie miało wpływu na to, czy system zniszczy je Fragmentpo opuszczeniu Activity. Jeśli opuścisz Activity(tzn. Naciskając przycisk Home), Fragments może zostać zniszczony. Jeśli wyjdziesz Activity, naciskając przycisk Wstecz (w ten sposób wywołując finish()i skutecznie niszcząc Activity), wszystkie Activitydołączone Fragments zostaną również zniszczone.
Dlaczego nie działa z fragmentami na tylnym stosie?
Prawdopodobnie jest wiele powodów, dla których nie jest obsługiwany, ale najbardziej oczywistym powodem jest to, że Activityzawiera odniesienie do FragmentManageri FragmentManagerzarządza backstackiem. Oznacza to, że bez względu na to, czy zdecydujesz się zachować swoje, Fragmentczy nie, Activity(i tym samym FragmentManagerbackstack) zostanie zniszczony przy zmianie konfiguracji. Innym powodem, dla którego może nie działać, jest to, że sytuacja może stać się trudna, jeśli zarówno zachowane fragmenty, jak i niezarezerwowane fragmenty zostaną dopuszczone do istnienia na tym samym plecaku.
Jakie są przypadki użycia, w których warto zastosować tę metodę?
Zachowane fragmenty mogą być bardzo przydatne do propagowania informacji o stanie - zwłaszcza zarządzania wątkami - między instancjami działania. Na przykład fragment może służyć jako host dla instancji Threadlub AsyncTask, zarządzając jego działaniem. Zobacz mój post na blogu na ten temat, aby uzyskać więcej informacji.
Ogólnie potraktowałbym to podobnie do używania onConfigurationChangedz Activity... nie używaj go jako bandaida tylko dlatego, że jesteś zbyt leniwy, aby poprawnie wdrożyć / obsłużyć zmianę orientacji. Używaj go tylko wtedy, gdy potrzebujesz.