2016-05-14 17 views
0

Ich habe Tow asynctasks, die ich möchte, dass sie separat ausgeführt werden, wenn ich auf eine Schaltfläche klicke. Ich meine, wenn der Knopf angeklickt wird, wird der zweite nicht beginnen, bis der erste schon fertig ist. By the way, habe ich versucht, zu verwenden:Wie man zwei asynchrone Aufgaben nacheinander ausführt?

if(task1.getStatus()==AsyncTask.Status.FINISHED){ 
task2.excecute(); 
} 

Aber es funktioniert nicht ...

Jede Hilfe bitte?

+1

Sie können 'task2.execute();' in 'onPostExecute' von' task1' setzen –

+0

Wenn Sie zwei Dinge (A und B) asynchron machen wollen, so dass B nach A läuft, warum nicht einfach eine * single * Aufgabe erstellen, die A dann B? – Andreas

+0

@hamzaoui müssen Sie zuerst Aufgabe aufrufen dann onPostExecute Methode dann zweiten Asyntask in der PostExecute-Methode aufrufen. das lösen – Amitsharma

Antwort

1

Seit HONEYCOMB werden bei der Verwendung von execute() "Tasks in einem einzelnen Thread ausgeführt, um häufige Anwendungsfehler zu vermeiden, die durch die parallele Ausführung verursacht werden." Daher sollten Ihre AsyncTasks standardmäßig nacheinander ausgeführt werden.

http://developer.android.com/reference/android/os/AsyncTask.html

Wie Verifizieren Sie, dass dies nicht der Fall ist?

+0

Aber wenn ich mache: task1.execute(); task2.execute(); Sie laufen zur selben Zeit, das ist das Problem! –

+0

Darf ich fragen, wie Sie getestet haben, dass sie gleichzeitig laufen? – Nathanael

0

Die if-Anweisung wartet nicht, bis die Bedingung erfüllt ist. Sie wertet nur die Bedingung aus, und wenn sie wahr ist, führt sie die Anweisung im if-Block aus, andernfalls fährt der Thread mit der Anweisung nach dem if-Block fort. Eigentlich muss man auf den Zustand warten.

Die einfachste Methode wäre, nur eine Warteschleife zu implementieren:

while (task1.getStatus()!=AsyncTask.Status.FINISHED) 
{ 
    Thread.sleep(10); 
} 
task2.execute(); 

Aber dieser Ansatz hat den Hauptnachteil, dass der tatsächliche Thread blockiert wird. Erwägen Sie, das mit java 6 eingeführte Future Framework zu verwenden, um Ihr Problem zu lösen

Verwandte Themen