Stoppen von handlerfähigen Tasks beim Löschen von Aktivitäten

8

Normalerweise delegiere ich alle Activities-Ereignisse an eine separate Controller-Klasse, die eine spezielle Methode zur Behandlung von Ereignissen von Activity

hat %Vor%

Dies geschieht, um den UI-Thread reaktionsbereit zu halten und alle Berechnungen in Hintergrundaufgaben durchzuführen.

Wenn jedoch die Methode Activity.onDestroy() vom System aufgerufen wird, wird controller.dispose() method aufgerufen, was auf diese Weise den gesamten Inhalt des Controllers bereinigt.

%Vor%

Wie Sie sehen, geschieht die Entsorgung des Controllers im UI-Thread, ohne dass er an einen Handler-Thread delegiert wird.

Das Problem tritt auf, wenn beispielsweise onDestroy in der Mitte von onStartup() method aufgerufen wird: onDestroy bereinigt das Modell und alle anderen Referenzen, aber innerhalb von onStartup versucht es auf das Modell zuzugreifen Irgendein Punkt, aber wenn man bedenkt, dass es null ist, wird eine Ausnahme ausgelöst.

Was ist der beste Weg, um dieses Problem zu lösen? Ich möchte nicht jede Controller-Methode sperren, da einige von ihnen gleichzeitig auftreten können, ohne sich gegenseitig zu stören.

    
Sergei Ledvanov 06.03.2012, 08:58
quelle

1 Antwort

4

In der Methode dispose () sollten Sie den workerHandler bereinigen, bevor Sie das Modell entsorgen. Siehe removeCallbacks oder removeCallbacksAndMessage(null) Methoden in der Handler-Klasse. Die letztere Methode entfernt alle Rückrufe und Nachrichten, wenn das Argument null ist.

    
Martin Serrano 21.09.2012, 19:10
quelle