给定以下 LogCat 跟踪,它表明在之前清楚地Handler.removeCallbacks()
调用了 (via 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()-ed 。然后,2.01 秒后,它是 run()...
有什么可以解释的?
例如,对于 Android 来说,0.01 秒是否太短而无法计算顺序?
任何调试这个的想法都将非常感激。