Ponieważ Honeycomb
i v4 Compatibility Library
jest to możliwe w użyciu AsyncTaskLoader
. Z tego, co rozumiem, AsyncTaskLoader
mogą przetrwać zmiany konfiguracji, takie jak przewracanie ekranu.
Czy zaleca się używanie AsyncTaskLoader
zamiast AsyncTask
? Czy też pojawia LoaderManager
się na zdjęciu?
Ale nie znalazłem żadnego dobrego przykładu (ów), jak poprawnie używać AsyncTaskLoader
. Dokumenty również nie zawierają przykładów. Czy ktoś może podać dobre przykłady.
AsyncTaskLoader
, a kiedy więcej programistów zacznie go używać, pojawi się więcej przykładów.Porównując AsyncTaskLoader z AsyncTask , jak być może wiesz, kiedy obrócisz ekran urządzenia, może to zniszczyć i odtworzyć Twoją aktywność, aby było jasne, niech obraz obraca Twoje urządzenie podczas transakcji sieciowej:
AsyncTask zostanie ponownie wykonany jako wątek w tle, a poprzednie przetwarzanie wątku w tle było po prostu zbędne i zombie.
AsyncTaskLoader zostanie ponownie użyty w oparciu o identyfikator modułu ładującego zarejestrowany wcześniej w programie Loader Manager, dlatego należy unikać ponownego wykonywania transakcji sieciowej.
Podsumowując, AsyncTaskLoader zapobiega duplikowaniu wątków w tle i eliminuje powielanie działań zombie.
źródło
AsyncTaskLoader wykonuje tę samą funkcję co AsyncTask , ale trochę lepiej. Łatwiej radzi sobie ze zmianami konfiguracji działań i zachowuje się w ramach cykli życia fragmentów i działań. Fajną rzeczą jest to, że AsyncTaskLoader może być używany w każdej sytuacji, w której AsyncTask jest używany. Za każdym razem, gdy dane muszą zostać załadowane do pamięci, aby działanie / fragment mogły zostać obsłużone, AsyncTaskLoader może lepiej wykonać zadanie.
Jest jednak kilka problemów z używaniem AsyncTasks:
AsyncTaskLoader doc
źródło
Niektóre różnice inne niż opisane w innych odpowiedziach:
Podczas korzystania z AsyncTaskLoader przez AsyncTask :
AsyncTaskLoader umożliwia nam ładowanie starych danych z pamięci podręcznej do momentu zwrócenia nowych danych przez
forceLoad()
Możemy ustawić opóźnienia na AsyncTaskLoader, dzięki
setUpdateThrottle()
czemu możemy zapobiec kolejnym aktualizacjom klienta (aktywność / fragment)AsyncTaskLoader można udostępniać wielu fragmentom, jeśli mają one wspólną aktywność nadrzędną i jeśli zostały uruchomione z
getActivity().getSupportLoaderManager()
AsyncTaskLoader zostaje zniszczony,
LoaderManger
gdy jego połączone działanie nie jest już dostępne. podczas gdy musimy ręcznie zniszczyć AsyncTasks, jeśli jego aktywność wywołująca zniszczy. Oszczędza to nasz czas przed pisaniem wszystkich rzeczy rozliczeniowych. AsyncTaskLoader dobrze współpracuje z ich odpowiednimi cyklami życia.Tak więc AsyncTaskLoader jest znacznie lepszy niż AsyncTask.
źródło