2015-05-23 17 views
9

für meine App habe ich ein Framework für alle Netzwerkaufrufe an eine externe API erstellt. Ich setze alles in "Dienste" wie: UserService, MessageService usw. Also jetzt wenn ich eine Netzwerkmethode aufrufen will kann ich das nicht im UI-Thread meiner Activity machen also habe ich eine AsyncTask gemacht und alles war einfach in Ordnung =)Android: Alternativen zu AsyncTask?

Aber jetzt möchte ich etwas wie geben die Methode, um die AsyncTask ausführen, so dass ich keine AsyncTask für jede Methode meines Netzwerk-Framework schreiben muss. Anstatt also so etwas wie dieses aufweist:

public class NetworkTask extends AsyncTask<UserService, Void, Void> { 

    @Override 
    protected Void doInBackground(UserService... params) { 
     UserService userService = params[0]; 
     userService.getUser(); 
     return null; 
    } 
} 

Ich möchte etwas mehr „abstrakt“, so der AsyncTask nicht braucht die „getUser“ Methode wissen? Aber ich finde keine Idee, wie das geht ... Vielleicht ist die AsyncTask dafür sowieso nicht gut?

+1

Es ist nicht ganz klar, was Sie fragen, aber 'IntentService' wird häufig als Alternative zu' AsyncTask' verwendet. – pathfinderelite

+1

Ich bin mir nicht sicher, ob ich Sie auch richtig verstehe, aber eine Alternative zu AsyncTask sind Loader, eigentlich Sie sollte sie bevorzugen. http://developer.android.com/guide/components/loaders.html –

+0

Ja, tut mir leid, ich weiß nicht, wie man das richtig ausdrückt, also war die Suche im Web auch nicht hilfreich. Ich versuche es noch einmal zu erklären: in der Methode "doInBackground" möchte ich "userService.getUser" nicht explizit aufrufen, da es viele andere Methoden und Dienste gibt, die Netzwerkaufrufe durchführen und ich sie nicht auf dem Main ausführen kann/UI Thread brauche ich zB eine AsyncTask. Aber ich möchte nur eine AsyncTask für jede Netzwerkmethode haben ... –

Antwort

-1

Sie Volley-Bibliothek verwenden können, die es auf dem Hintergrund-Thread funktionieren und geben Sie zum Haupt-Thread der Steuerung zurück, wenn Dinge sind erledigt.

+0

Ich habe volley für Tausende von Aufzeichnungen aufrufen, aber es immer App hängen/Lags. Also, ich bevorzuge keine Salve für viele weitere Antwortdaten. Sonst ist Volley exzellent. – Naitik

+0

jetzt werde ich LoopJ verwenden -> http://loopj.com/android-async-http/ – Naitik

1

Wenn Sie don t bevorzugen Bibliotheken von Drittanbietern und bevorzugen Bibliothek mit Einfachheit und guter Dokumentation und Unterstützung, Lader ist die beste Wahl.

Zu unserer Freude, AsyncTaskLoader (Unterklasse von Loadern) führt die gleiche Funktion wie die AsyncTask, aber besser und auch Activity Konfigurationsänderungen einfacher handhaben.Und am besten ist es innerhalb der Lebenszyklen von Fragmente und Aktivitäten verhält.

Weitere Informationen und Unterklassen finden Sie unter documentation.