2011-08-12 9 views
1

は明らかにmyTask.run()Handler.removeCallbacks()が(MyListener.cancelTimeout()経由)と呼ばれていることを示している、以下のLogCatトレースを考える:Handler.removeCallbacks()はコールバックを削除しません - なぜですか?

08-12 17:29:13.990: VERBOSE/MyListener.setTimeout(2625): TID: 2625, Handler{460a86e8}, [email protected] 
08-12 17:29:14.000: VERBOSE/MyListener.cancelTimeout(2625): TID: 2625, Handler{460a86e8}, [email protected] 
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}, [email protected] 
08-12 17:29:16.010: VERBOSE/MyListener.handleTimeout(2625): TID: 2625 

おそらく、この謎を説明できますか?

注ログの正確なタイムスタンプ:まったく同じRunnableオブジェクト(461cc378 @ MYTASKは)()removeCallbacksされている - )0.01秒た後、それはpostDelayed(されている正確編。その後、2.01秒後に実行されます...

これを説明できるものは何ですか?

たとえば、Androidが注文を把握するには0.01秒短すぎますか?

これをデバッグするためのアイデアは非常に高く評価されます。

答えて

5

これは機能します。あなたは間違っていることを理解するのに役立つコードを与えていませんが、間違ったハンドラから削除したり、間違った実行可能ファイルを渡したりして、何か間違ったことをしています。

+0

私が必要としたのは出発点でした。あなたはちょうど2つを提供しました:(1)間違ったハンドラからの削除、(2)間違った実行可能ファイルの渡し。私はこれを自分でデバッグしようとします。私が成功しなければ、実際のコードを掲載します。ありがとう+1 +1 – ef2011

+0

実際の16進数の参照で、同じハンドラから削除して正しい実行ファイルを渡すことを示唆していませんか? – ef2011

+0

問題が見つかり解決しました。ログの 'cancelTimeout()'は 'setTimeout()'によって呼び出されたものであることが判明しています(以前のタイムアウトがキャンセルされていることを確認するため)、cancelTimeout()は本当に呼び出されませんでした。 0.01秒の差と正確な2秒のタイムアウトは、私のためのヒントを提供していたはずですが、あなたはデバッグの仕方を知っています:) – ef2011

関連する問題