2012-12-26 6 views
11

Ich versuche eine Variable in einer Aktivität auf das Ergebnis meiner AsyncTask zu setzen. Ich habe gelesen, dass ich eine Variable nicht zurückgeben kann und dass ich die Variable in meiner Aktivität einrichten und dann in der onPostExecute Methode ändern müsste.Wartet auf die Beendigung von ASyncTask oder auf die zu setzende Variable

Mein Problem ist, dass nach der AsyncTask muss ich diese Variable verwenden. Ich habe Probleme damit, weil alle Lösungen, die ich bisher versucht habe, dazu führen, dass die Benutzeroberfläche einfriert und dann nicht reagiert.

Was ich bisher versucht:

while (!task.isCancelled()) { 
    // Wait... 
} 

Und

while (variable == null) { 
    // Wait ... 
} 

Ist das, was ich die beste Art und Weise machte eine Variable aus dem AsyncTask meiner Tätigkeit zu übergeben? Wenn dies der Fall ist, wie kann ich dann auf die Beendigung der Aufgabe in der Aktivität warten, ohne die Benutzeroberfläche zu sperren?

+10

Sie sollten nicht auf die AsyncTask warten. Es sollte etwas tun, wenn es fertig ist, wahrscheinlich in 'onPostExecute()'. – Eric

+1

In der 'onPostExecute()' Methode ändere ich die Variable in meiner Aktivität in das Ergebnis. Ich versuche zu warten, bis die Variable geändert wird. – Dan

+0

Genau - tun Sie das nicht. Die "AsyncTask" 'onPostExecute()' selbst sollte die Reihe von Ereignissen starten, die nach dem Abschluss der Aufgabe auftreten sollen. Kein anderer Code sollte sich auf diese Aufgabe verlassen. – Eric

Antwort

13

Setzen Sie einfach Ihren Code, den Sie ausführen möchten, nachdem die Variable in einer Funktion geändert wurde, und rufen Sie diese Funktion von onPostExecute auf.

+1

Das ist keine saubere Codierung! –

37

Wenn Sie vom Ergebnis einer AsyncTask abhängig sind, können Sie dies tun.

Der Typ des Ergebnisses ist der Rückgabetyp in Ihrer doInBackground() - Methode. Aber dann wartet Ihr Haupt-Thread, bis die Aufgabe abgeschlossen ist.

+0

Danke! Genau das habe ich gesucht. – PeteH

+4

Aber wenn Sie das tun, werden Sie den Haupt-Thread blockieren. Das ist nicht zu empfehlen. – adalPaRi

+0

AdalPaRi, es sei denn, es ist ein Begrüßungsbildschirm? –

Verwandte Themen