Handler.removeCallbacks()不会删除回调 - 为什么?

时间:2011-08-12 21:59:26

标签: java android handler postdelayed

给出以下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)正在被删除_Callbacks() - 精确0.01秒 之后它已被postDelayed ()。然后,2.01秒后,它运行()...

有什么可以解释这个?

例如,Android的0.01秒太短,无法确定顺序?

非常感谢任何有关调试的想法。

1 个答案:

答案 0 :(得分:5)

这确实有效。你还没有给出任何代码来帮助弄清楚你做错了什么,但你做错了什么:从错误的处理程序中删除,传递错误的runnable,等等。