2

私は基本的に、このメッセージの下部にあるコード投稿を行っています。foob​​ar() は、イベントを共通のステート マシンにポストします。また、共通ステート マシンに投稿されたタッチスクリーン イベントもあります。ハンドラーを使用することで同期の問題が発生しないというのは本当ですか? (つまり、私のステート マシンは、タッチ イベントと foobar イベントによってもメッセージが表示されません) 同時に?

private Handler handler = new Handler();
handler.postDelayed(runnable, 100);


private Runnable runnable = new Runnable() {
   @Override
   public void run() {
      /* do what you need to do */
      foobar();
      /* and here comes the "trick" */
      handler.postDelayed(this, 100);
   }
};
4

1 に答える 1

0

オブジェクトの同じインスタンスが、選択した (デフォルトではメイン スレッド) でHandler渡されたメッセージ/ランナブルのキューを介して処理されます。Looper

いいえ、メッセージのリストを Handler に送信すると、メッセージは一度に 1 つずつ実行され、並行して実行されることはありません。

ただし、同期の問題が懸念される場合はsynchronize(object) {}、メソッド内のコードを共通オブジェクトの周りに配置する必要があります。そうすることで、共通オブジェクトのロックを待機します。つまり、そのメソッドをどこからでも呼び出すことができ、他のメソッドと並行して実行されることはありません。を使用したコードsynchronize(object) {}

于 2012-11-18T20:28:53.787 に答える