2016-09-07 3 views
0

私はタイマーから定期的にUIを更新するハンドラを持っています。 更新がタイマー間隔よりも長くかかることがあります。この場合、どうなるでしょうか? Androidはhandlemessageを監視して作業を完了していますか、それとも自分で行うべきですか?おそらく愚かな質問ですが、長いグーグル・グーグルでそれを参照することはありませんでした。アンドロイドのハンドルメッセージを再入力することはできますか?

EDIT:

私はConcurrentLinkedQueueを持っているので、私は求めていますし、それからの要素がhandlemessageから呼び出されるメソッド内で削除されます。それが削除される唯一の場所ですが、2つの要素が1つではなく削除されることがあります。 handlemessageのように再入力しました。 @Gabeによると不可能な場合、他にどんな説明がありますか?

+0

いいえ、あなたは自分のロジックでそれを行う必要はありません。 – Amy

+0

これを確認する参考資料はありますか?私が逃したリンクを知りたいだけです。 :) – Flot2011

答えて

1

ハンドラへのすべてのメッセージは同じスレッドで発生します。したがって、handler.handleMessageを直接呼び出さない限り、再入可能なインスタンスを持つことは不可能です。ハンドラはイベントループの一部です。イベントはLooperオブジェクトに送信され、スレッドが各イベントを終了すると、Looperから次のイベント(この場合はイベントはハンドラメッセージ)が取得され、FIFO順に処理されます。

1

Handlerに送信されたメッセージは、キューに入れられ、順番に処理されますが、それらが均等に処理されるわけではありません。このコードを考えてみましょう:最初の1が完了したとき、それはすでに遅れることになるので、

myHandler.postDelayed(thisRunnableWillTakeTenSeconds, 1000); 
myHandler.postDelayed(anotherRunnable, 2000); 

Runnableはなく、1秒後、最初の1の後に右に実行されます。

関連する問題