次の 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 が順序を把握するには短すぎますか?
これをデバッグするためのアイデアは大歓迎です。