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?
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.
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
aufrufenexecuteOnExecutor(java.util.concurrent.Executor, Object[]) with THREAD_POOL_EXECUTOR.
Ich hatte eine Klasse zum Ausführen von AsyncTask gleichzeitig geschrieben.
Schau es dir an:
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
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.
Tags und Links java android multithreading sockets android-asynctask