2012-05-16 17 views
7

Ok, stworzyłem Fragment z pewnym UI (para otaczaniem i rzeczy) i użyłem setRetainInstance ponieważ Im prowadzenie AsyncTask kwerendy serwera (wniosek można wysłać tylko raz) i muszę wynik AsyncTask. Więc moje pytanie brzmi: Czy to źle, aby zachować cały fragment z interfejsem użytkownika? Widziałem kilka przykładów, gdzie ludzie używają dodatkowego Fragment do korzystania z setRetainInstance, ale .. czy coś jest nie w porządku, nie używając tego dodatkowego? Jeśli występuje problem z korzystaniem z setRetainInstance, dlaczego tak się dzieje? Nie można znaleźć żadnych informacji w dokumentacji na ten temat.setRetainInstance fragment z UI Androida

Odpowiedz

-1

Jeśli blokujesz orientację, powinieneś być w porządku. W przeciwnym razie może dojść do wycieku pamięci, jeśli zachowacie widgety powiązane z konkretną instancją działania.

+0

ale nie są to widżety powiązane z Fragmentem? może nie rozumiem, jak działają Fragmenty. – Raykud

+1

Nawet jeśli orientacja jest zablokowana, może to być problematyczne. Android ponownie tworzy widok dla każdej zmiany konfiguracji. Natomiast zmiana konfiguracji może dotyczyć obracania wyświetlacza (zwykły przypadek), zmiany języka, dołączania/odłączania klawiatury i innych. Dbanie o obrót ekranu nie rozwiązuje całego problemu. – sstn

2

Nawet jeśli użyjesz setRetainInstance(true), Twój Fragment będzie nadal odtwarzał swoje widoki po obróceniu (otrzymasz połączenie z onDestroyView, a następnie onCreateView). Tak długo jak nie zachowujesz odniesień do widoków po numerze onDestroyView, nie będzie żadnych wycieków starej aktywności. Najlepszym podejściem byłoby jawne anulowanie odniesień w onDestroyView, ale twój kod w onCreateView z reguły nadpisze te odniesienia.

Istnieje wiele przykładów online (w tym niektóre oficjalne), w których ludzie używają oddzielnego fragmentu (bez widoku) do przechowywania danych. Zakładając, że to, co powiedziałem powyżej, jest poprawne, nie jest to konieczne (ze względu na zapobieganie wyciekom). W wielu przypadkach możesz skończyć się czystszym kodem/architekturą, jeśli użyjesz osobnego fragmentu, którego zadaniem jest tylko obsługa danych i nie martw się o interfejs użytkownika.

Możesz sprawdzić, czy wyciekasz konteksty aktywności po obróceniu o using Eclipse MAT.

Powiązane problemy