2017-05-15 3 views
1

Seit AsyncTaskLoader kann alles AsyncTask tun, und hat zusätzlich eingebaute Best Practice-Funktionen wie Thread-Duplizierung & vorzeitigen Tod Prävention.Ist AsyncTask jetzt mit AsyncTaskLoader veraltet?

Gibt es einen Grund mehr, AsyncTask zu verwenden? Oder sollte ich einfach blind AsyncTaskLoader überall verwenden

+1

http://stackoverflow.com/questions/7120813/asynctaskloader-vs-asynctask –

+1

"und zusätzlich eingebaute Best-Practice-Funktionen wie Thread-Duplizierung und vorzeitige Todesverhinderung" - 'AsyncTaskLoader' hat keine von diesen Dingen, zumindest in Bezug darauf, wie ich diese Begriffe verwenden würde. "Gibt es einen Grund mehr, AsyncTask zu benutzen?" - nicht alles passt zum "Loader" -Muster. "Oder sollte ich AsyncTaskLoader einfach blind benutzen" - sollten Sie nicht "blind" irgendetwas mit Threads machen. Verschiedene Situationen erfordern unterschiedliche Thread-Verwendungsmuster und unterschiedliche Klassen (z. B. "IntentService", ein benutzerdefinierter "ThreadPoolExecutor"). – CommonsWare

Antwort

3

AsyncTaskLoader ist nur nützlich, um Daten in einer Aktivität oder Fragment zu laden. AsyncTask ist vielseitiger und kann jede Art von Hintergrundoperation in jeder Art von Komponente ausführen. Es gibt Alternativen wie RxJava, HandlerThreads, einfache Threads usw., aber es ist sicherlich nicht veraltet.

+0

Danke für Ihre Antwort. Heißt das, wenn ich versuche, einige Bilder/Thumbnails herunterzuladen und einen neuen Inhalt (Kommentare/Likes/etc) zu laden, dass AsyncTaskLoader> AsyncTask? Können Sie auch ein Beispiel geben, wo AsyncTask vielseitiger ist? – AlanSTACK

+0

Um neuen Inhalt zu laden, würden Sie normalerweise AsyncTaskLoader verwenden. Zum Laden von Bildern wird vorzugsweise eine spezielle Bildladebibliothek wie Glide oder Picasso verwendet. AsyncTask ist möglicherweise eine gute Option, um Daten einmal zu senden (wie das Senden eines Formulars), aber Vorsicht bei Problemen mit dem Lebenszyklus/Speicherleck. Sie können AsyncTask auch verwenden, um eine einmalige asynchrone Operation zu starten, die fortgesetzt werden kann, nachdem der Benutzer eine Aktivität verlassen hat, wie das Schreiben von Daten auf die Festplatte oder das Senden von Statistiken. Oder Sie können eine AsyncTask von einem Service starten, wenn Sie mehr Kontrolle benötigen als IntentService. – BladeCoder

2
  • Wenn Sie einen Hintergrundjob, der egal Aktivität zerstört werden müssen getan oder nicht: Service oder IntentService von einem Mechanismus von Hintergrundjobs.
  • Wenn Sie einen Hintergrund-Job haben, der erledigt werden muss, und benachrichtigen Sie die Benutzeroberfläche erneut: Verwenden Sie AsyncTaskLoader.
  • Wenn Sie einen Hintergrundjob haben, der erneut ausgeführt werden muss und dem Benutzer erneut gemeldet werden muss und weiterhin ausgeführt wird, obwohl die Aktivität zerstört wird: Verwendung von AsyncTask, da AsyncTask weiterhin ausgeführt wird, wenn Ihre Aktivität angehalten/zerstört/Konfiguration geändert wird Seien Sie in diesem Fall vorsichtig, wenn das Speicherleck/Aktivitätsobjekt null ist. Du musst alleine damit umgehen.

In jeder Situation gibt es verschiedene Möglichkeiten zur Handhabung und Vermeidung. Aber denken Sie über den Fluss für die einfachste Lösung.

+1

Danke für die Antwort trotz der langen Zeitlücke. Dies hat mein Verständnis erhöht. – AlanSTACK

Verwandte Themen