Dies ist eine späte Antwort, aber hier ist eine andere Methode, wenn Sie mögen nur eine bestimmte Kategorie von Runnables aus dem Handler (dh in OP Fall entfernen, nur die enge Animation entfernen, andere Runnables in der Warteschlange verlassen):
int firstToken = 5;
int secondToken = 6;
//r1 to r4 are all different instances or implementations of Runnable.
mHandler.postAtTime(r1, firstToken, 0);
mHandler.postAtTime(r2, firstToken, 0);
mHandler.postAtTime(r3, secondToken, 0);
mHandler.removeCallbacksAndMessages(firstToken);
mHandler.postAtTime(r4, firstToken, 0);
Der obige Code führt nur "r3" und dann "r4" aus. Auf diese Weise können Sie eine bestimmte Kategorie von Runnables entfernen, die von Ihrem Token definiert wurden, ohne dass Referenzen auf die Runnables selbst vorhanden sein müssen.
Hinweis: Der Quellcode vergleicht Token nur mit dem Operanden "==" (er ruft nicht .equals() auf), daher sollten Sie am besten anstelle von Strings für das Token ints/Integers verwenden.
Ist es möglich, Rückrufe für anonyme Runnables zu entfernen? –
Ich glaube nicht ... Sie müssen nicht-anonyme verwenden. Andernfalls können Sie sie in Zukunft nicht mehr referenzieren. – Cristian
Siehe @ NameSpace's Antwort. Sie können ausstehende Runnables entfernen, wenn Sie das Runnable mit einem Token veröffentlichen. Oder Sie können die Methode von Daniel L. verwenden, alle Rückrufe/Nachrichten mit einem Null-Token zu entfernen. – vman