0

すべてのチュートリアルまたは例でこんにちは。ルーパーで使用されるハンドラーは、ルーパーの例の中に作成されます。

 class LooperThread extends Thread {
      public Handler mHandler;

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

          mHandler = new Handler() {
              public void handleMessage(Message msg) {
                  // process incoming messages here
              }
          };

          Looper.loop();
      }
  }

しかし、スレッドの前にハンドラーを作成する場合、たとえば

public Handler mHandler=new Handler() {
              public void handleMessage(Message msg) {
                  // process incoming messages here
              }
          };

ルーパーのrun()メソッドのスレッドで彼を関連付けることは可能ですか、それともルーパー内のrunメソッドでのみ彼を作成する必要がありますか?

4

1 に答える 1

0

のコンストラクタはHandler基本的に次のようになります。

public Handler() {
    ....
    mLooper = Looper.myLooper();
    if (mLooper == null) {
       // throws an exception
    }
    ....
}

このフィールドmLooperはパッケージプライベートfinalフィールドです。もちろん、後で変更できるセッターはありません。

要するに、Handler()コンストラクターはそれ自体をに関連付けますLooper.myLooper()。-を渡すことができる他のコンストラクターがありますが、これらは、を作成する前に作成するLooper必要もあります。LooperHandler

于 2012-09-12T10:26:19.717 に答える