Wenn ich einige Daten über HTTP (oder was auch immer) asynchron laden muss, um die Benutzeroberfläche zu aktualisieren, habe ich ein paar Optionen beim Schreiben einer Android-Anwendung (neben vielen anderen, die ich sicher vermisse):
Verwenden Sie zum Aktualisieren der Benutzeroberfläche einen normalen Thread und einen Handler.
Verwenden Sie IntentService und verwenden Sie entweder einen Rückruf oder senden Sie die Ergebnisse per eine Absicht.
Verwenden Sie Loader .
Nach meinem Verständnis ist ein IntentService nicht an den Lebenszyklus einer Aktivität gebunden, so dass Änderungen an der Ausrichtung usw. keinen Einfluss auf den Abruf von Daten haben. Wo dies bei einer AsyncTask oder einem Thread, der innerhalb einer Aktivität ausgelöst wird, nicht der Fall ist.
Der Grund für die Frage ist, dass ich vor kurzem über Loaders
gelesen habe und bezüglich ihrer Anwendung verwirrt bin. Sie scheinen enger mit einer Datenquelle verknüpft zu sein. Wenn sich die Datenquelle ändert, wird "transparent" alles entsprechend gehandhabt. Loaders
scheint auch gegenüber Konfigurations- / Orientierungsänderungen (glaube ich) tolerant zu sein.
Ich habe derzeit einen IntentService verwendet, um REST-konforme Serviceanrufe zu tätigen und die Ergebnisse an entsprechende Aktivitäten zu senden.
Ich gehe davon aus, dass ich einen HTTP-basierten Loader schreiben könnte, aber ich bin mir nicht sicher, ob dies der beste Mechanismus ist.
Was sind die Vorteile / Nachteile einer der asynchronen Datenlade-Methoden gegenüber anderen?
All diese Mechanismen sind einfach Optionen. Es gibt keine Einheitswerkzeuge für alle, so dass alle diese verschiedenen Methoden zum Vervollständigen der gleichen Aufgabe eine Möglichkeit bieten, möglichst viele Anwendungsfälle abzudecken.
Letztendlich liegt es an Ihnen zu entscheiden, welche Methode für Ihr Szenario sinnvoller ist. Aber für eine Art generische Erklärung dessen, was Sie verwenden sollten ...
Regelmäßiger Thread und ein Handler - Warum, wenn es andere, einfachere Optionen gibt?
AsyncTask - Da eine AsyncTask fast immer von einer Aktivität abhängt, verwenden Sie diese, wenn Sie Daten asynchron laden müssen und Sie sich 100% sicher sind, wie lange es dauern kann. Beispiel: Ausführen einer SQLite-Abfrage.
IntentService / Service - Dienste sind nicht an eine Aktivität gebunden wie eine AsyncTask, daher sind sie perfekt für Szenarien geeignet, in denen Sie möglicherweise nicht wissen, wie lange es dauert, bis sie abgeschlossen sind. Beispiel: Herunterladen von Daten von einer Web-API und Aktualisieren einer Datenbank.
Loader - Loader sollen den Prozess des Ladens von Daten vereinfachen und in die Benutzeroberfläche einfügen. Die Art von Loadern geht davon aus, dass die Daten, die Sie laden, dem Benutzer als eine Liste von einer Art präsentiert werden. Beispiel: Daten herunterladen und in ein ListView einfügen
Tags und Links android