2017-09-22 9 views
0

Dies war etwas, was ich nicht erwartet nach meinem Verständnis zu passieren.Android App stürzt nach dem Anruf ab

In meiner App führe ich() eine AsyncTask aus, die weniger als 2-3 Sekunden dauern kann. In dieser AsyncTask habe ich runOnThread() ausgeführt, das wenige UI-Steuerwerte aktualisiert.

Das funktioniert gut bis, wenn ich einen Klick auf Abmelden Button, die ein Ende() der Aktivität macht.

Ich bekomme Null Zeiger Ausnahme, dass findViewById null zurückgegeben. Ich kann vor der Aktualisierung einen Null-Check hinzufügen, aber angesichts der Anzahl der verwendeten UI-Bildschirme und AsyncTasks würde ich in einer großen Anzahl von Überprüfungen landen.

Warum sollte der UI-Thread noch ausgeführt werden, nachdem finish() aufgerufen wurde?

Was ist die beste Lösung für diesen Fall? Das Problem tritt nur auf, wenn eine genaue Übereinstimmung mit dem Zeitunterschied zwischen der Beendigung von AsyncTask und dem Aufruf von finish() besteht.

Grüße,

Harsha

+1

https://stackoverflow.com/questions/31085406/what-happens-to-running-asynctasks-when-the-activity-changes –

+1

https://stackoverflow.com/questions/2531336/asynctask-wont-stop -even-when-the-activity-has-destroyed –

+0

Daniel, Informationen in diesen Tickets scheint genug genug zu sein, um einen Versuch zu geben .. Ich suchte mit anderer Perspektive. – harshal

Antwort

1

Die AsyncTask läuft im Hintergrund, bis der Job abgeschlossen ist es ausgeführt wird, so „Finish“, um die aktuelle Aktivität töten nannte es nicht. Das Hinzufügen von Null-Prüfungen wäre ein Ärger, wie Sie gesagt haben. Stattdessen würde ich die asyncTask vor dem Aufruf von finish() abbrechen.

if (asyncTaskInstatnce != null && !a.isCancelled()) 
    a.cancel(true); 
-1

Sie verwenden die OnPostExecute Methode des AysncTask die Benutzeroberfläche zu aktualisieren.