Entfernen von callback-handler nicht funktioniert
Habe ich geschrieben-handler ruft die Methode auf jedem Zeitintervall. Ich möchte zu entfernen, die handler in destroy(). Der code, den ich verwenden, wie folgt, In Oncreate()
private final Handler _handler = new Handler();
public int DATA_INTERVAL = 30 * 1000;
Runnable getData;
getData = new Runnable()
{
@Override
public void run()
{
recieveData();
}
};
_handler.postDelayed(getData, DATA_INTERVAL);
und in ondestroy () verwende ich,
_handler.removeCallbacks(getData);
Aber removecallbacks nicht funktionieren. Es ruft nach beenden der Aktivität.
Man könnte
es gibt Fehler beim Aufruf _handler.removeCallbacksAndMessages() ohne parameter.
_handler.removeCallbacksAndMessages(null) verwenden Sie diese Zeile, und lassen Sie mich wissen, wenn es funktioniert.
Nein. funktioniert nicht:(
check this link, stackoverflow.com/questions/5883635/...
_handler.removeCallbacksAndMessages()
ohne parameter. Es entfernt alles in die Rückrufe und Meldungen stackes gibt Fehler beim Aufruf _handler.removeCallbacksAndMessages() ohne parameter.
_handler.removeCallbacksAndMessages(null) verwenden Sie diese Zeile, und lassen Sie mich wissen, wenn es funktioniert.
Nein. funktioniert nicht:(
check this link, stackoverflow.com/questions/5883635/...
InformationsquelleAutor Shalini | 2012-08-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
removeCallbacks(Runnable r):
so
removeCallbacks(..)
hält nur ausstehende Nachrichten (Runnables) derzeit nicht in Betrieb "ausführbar" also, wenn Sie wollen, zu stoppen, die derzeit ausgeführt Lauffähige dann mit einem Boolean-varaible für den Thread Stoppen, wenn der Benutzer Exit aus Ihrer app.finden Sie in diesem Beitrag für removeCallbacks nicht zu stoppen runnable
removeCallbacks
ausonDestroy
was läuft im Haupt-thread. Also entweder eine ausstehende Runnable wird zuerst ausgeführt, und dannonDestroy
bricht alle zukünftigen Rückrufe, oderonDestroy
wird zuerst ausgeführt und bricht alle zukünftigen Rückrufe so nicht Lauffaehig nach laufen würde. Er hat ein anderes problem.InformationsquelleAutor ρяσѕρєя K
Sind Sie nicht zeigt, der wichtigste Teil des Codes ist die
receiveData
Methode. Als Sie gesagt haben Sie die Aufgabe, in regelmäßigen Abständen, müssen Sie wieder aufrufenpostDelayed
von innen, die Methode zu verschieben, die Aufgabe. Wahrscheinlich hintergrund-threads beteiligt, da keine Vernetzung auf dem Haupt-thread.Dann haben Sie wahrscheinlich eine race-Bedingung beim beenden der Aktivität.
onDestroy
wird zuerst ausgeführt und dann die Aufgabe erneut gepostet.InformationsquelleAutor Mister Smith