1

次の 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 が順序を把握するには短すぎますか?

これをデバッグするためのアイデアは大歓迎です。

4

1 に答える 1

5

これは機能します。何が間違っているのかを理解するのに役立つコードを提供していませんが、何か間違ったことをしています: 間違ったハンドラーから削除し、間違ったランナブルを渡しています。

于 2011-08-12T22:24:53.847 に答える