1

2 つのワーカー スレッドがあります。

  • DB スレッド
  • ネットワーク スレッド

アプリのすべての部分で使用できるように、それらはシングルトンになります。

public class DbThread extends Thread {

      public Handler handler;

      @Override
      public void run() {
          Looper.prepare();

          handler = new Handler();

          Looper.loop();
      }
  }

それらはハンドラを介して通信します。私の懸念は同期です。メッセージを送信するために、作成中に別のスレッドが Handler にアクセスしようとする可能性があります。Handler アクセスを適切に同期するにはどうすればよいですか?

私の考えでは、別のスレッドの Handler にアクセスしたいスレッドは、 Handler が作成される前に待機する必要があります。しかし、これを達成する方法がわかりません。

4

1 に答える 1

2

このソリューションの実装に成功しました。

HandlerThread 内にルーパーを隠し、スレッドがメッセージを受信する準備が整うまで待つことができます。

ルーパーが初期化されるまで、内部のgetLooper呼び出しがブロックされるため、機能します。waitUntilReadyそうすることで、ハンドラーが作成されたことを確認できるだけでなく、スレッドがメッセージを受信する準備ができていることも確認できます。

于 2012-12-29T20:56:05.540 に答える