Muster, um AsyncTask "prozedural" zu machen

8

Ich verwende AsyncTask an vielen Orten ohne Probleme.

Jetzt bei Honeycomb müssen alle Netzwerk-E / A in einem Thread getrennt vom UI-Thread sein, der in vielen Fällen AsyncTasks an Orten benötigt, wo vor einer synchronen Netzwerkverbindung eine Honeycomb eine Exception geworfen hat jedes Netzwerk-E / A auf dem Haupt / Ui-Thread).

Nun möchte ich im Prinzip etwas wie Object result = MyAsyncTask().execute() bekommen, gibt es dafür gute Muster?

Ich habe gefunden AsyncTask Android - Design Pattern und Rückgabewerte Das macht Sinn und ist auch, wie GWT Dinge macht, aber irgendwie hört sich das an, als würde man dem Hund mit dem Schwanz wedeln (und dann kann es nur ich sein, dessen Gehirn sich noch mehr verdrehen muss).

    
Heiko Rupp 13.06.2011, 08:11
quelle

3 Antworten

13

Ja. Du bist nah dran. Probieren Sie

aus %Vor%     
Tyler Collier 14.07.2011, 00:38
quelle
4

Ich bin mir sicher, dass Sie keine synchrone Netzwerktransaktion im UI-Thread ausführen möchten, oder?

Das von mir verwendete Muster besteht darin, den Status in der Aktivität zu halten (die einen Empfänger implementiert), und dann AsycTask aufzurufen, der einen Rückruf zu Ihrer Aktivität in onPostExecute () ausführt (z. B. eine Absicht auslöst, auf die Ihre Aktivität wartet). Ihre Aktivität kann dann den Status gemäß den Extras in der Absicht aktualisieren und die Verarbeitung fortsetzen. Es ist im Grunde ein Zustandsautomat in Ihrer Aktivität, der Ihre Anmeldung und andere Funktionen ausführt. Alle Netzwerk-E / A-Komponenten werden in AsycTask-Instanzen ausgeführt, die dazu führen, dass der Status bei Fertigstellung aktualisiert wird.

    
Mark Allison 13.06.2011 08:37
quelle
1

Wenn Sie nur Ihren Thread blockieren möchten, während ein anderer Thread den Job erledigt, können Sie eine eigene Task-Abstraktion schreiben. Ich denke an etwas wie

%Vor%     
Alex Gitelman 13.06.2011 08:44
quelle

Tags und Links