Zweite AsyncTask wird nicht ausgeführt

8

Ich habe 2 AsyncTask, eine, die eine Socket-Verbindungen erstellt und eine andere, die Objekte mit diesen Sockets überträgt. Mein Code ist dies:

%Vor%

Das AsyncTask namens socketConnector wird jedoch niemals erstellt oder ausgeführt. Ich habe versucht, die Reihenfolge zu ändern, aber dann wird der Sender nicht erstellt oder ausgeführt ...

Was ist daran falsch?

    
Albert Pasaret 30.11.2012, 15:11
quelle

5 Antworten

10

Ich hasste es, als HONEY COMB die Ausführung mehrerer AsyncTask von gleichzeitig auf sequentiell änderte. Jedes Mal, wenn ich eine AsyncTask ausführe, mache ich so etwas.

%Vor%

Aber die Thread-Pool-Größe ist 5, wenn Sie die sechste Aufgabe hinzufügen, wird sie in einer Warteschlange hinzugefügt und wird nicht ausgeführt, bis einer der 5 Themen beendet ist.

    
coocood 01.12.2012, 07:04
quelle
2

Da ich nicht weiß, welche API-Ebene Sie verwenden, würde ich Ihnen empfehlen, ASYNC zu verwenden AUFGABE

Gemäß der Dokumentation:

  

Bei der ersten Einführung wurden AsyncTasks seriell in einem einzelnen Hintergrund-Thread ausgeführt. Beginnend mit DONUT wurde dies in einen Pool von Threads geändert, der es mehreren Tasks ermöglichte, parallel zu arbeiten. Beginnend mit HONEYCOMB werden Aufgaben in einem einzelnen Thread ausgeführt, um häufige Anwendungsfehler zu vermeiden, die durch die parallele Ausführung verursacht werden.

     

Wenn Sie wirklich eine parallele Ausführung wünschen, können Sie executeOnExecutor(java.util.concurrent.Executor, Object[]) with THREAD_POOL_EXECUTOR.

aufrufen
    
Robin Chander 30.11.2012 15:33
quelle
1

Haben Sie versucht, transmitter in connector's onPostExecute() auszuführen oder umgekehrt?

    
slezadav 30.11.2012 15:15
quelle
1

Ich hatte eine Klasse zum Ausführen von AsyncTask gleichzeitig geschrieben.

Schau es dir an:

Android-AsyncTask-Executor

Es dauert alles, um AsyncTask gleichzeitig unter jeder Android-Betriebssystemversion auszuführen. Es ist besser, Folgendes zu verwenden:

%Vor%

Weil AsyncTask.THREAD_POOL_EXECUTOR nur für api & gt; = 11 verfügbar ist

Mit meiner Klasse müssen Sie nur schreiben:

%Vor%

Und das ist alles. Keine Fehler bei Android 2.x, 3.x und 4.x

    
Artem Zinnatullin 09.12.2012 13:10
quelle
0

Wie Robin Chander sagte, läuft es wahrscheinlich seriell und Sie können executeOnExecutor benutzen ... aber es ist nicht verfügbar bis Android 3.0. Wenn Sie vollständige Kompatibilität wünschen, müssen Sie AsyncTask dumpen und Runnable verwenden. Wenn Sie Ergebnisse im UI-Thread melden müssen, vergessen Sie nicht, Handler zu verwenden.

    
Todd Sjolander 30.11.2012 16:08
quelle