给出以下LogCat跟踪,该跟踪显示Handler.removeCallbacks()MyListener.cancelTimeout()之前明显被调用(通过myTask.run()):

08-12 17:29:13.990: VERBOSE/MyListener.setTimeout(2625): TID: 2625, Handler{460a86e8}, myTask@461cc378
08-12 17:29:14.000: VERBOSE/MyListener.cancelTimeout(2625): TID: 2625, Handler{460a86e8}, myTask@461cc378
08-12 17:29:16.010: VERBOSE/myTask.run(2625): TID: 2625, MyTimeoutTask(handleTimeout())
08-12 17:29:16.010: VERBOSE/MyListener.cancelTimeout(2625): TID: 2625, Handler{460a86e8}, myTask@461cc378
08-12 17:29:16.010: VERBOSE/MyListener.handleTimeout(2625): TID: 2625


有什么可能解释这个谜?

请注意日志中的确切时间戳:相同的Runnable对象(myTask @ 461cc378)在被postDelayed()精确地0.01秒后被removeCallbacks()编辑。然后,在2.01秒后,它是run()...

有什么可能解释吗?

例如,0.01秒是否太短,以至于Android无法确定顺序?

任何调试的想法将不胜感激。

最佳答案

这确实有效。您没有提供任何代码来帮助您弄清楚自己在做错什么,但是您在做错了什么:从错误的处理程序中删除,传递错误的可运行内容等。

关于java - Handler.removeCallbacks()无法删除回调-为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7046787/

10-10 11:18