今一緒に話しアンドロイド(第百七十四バック:Androidのハンドラ機構C)

あなたはみなさん、こんにちは、さんが状回にハンドラ機構ではアンドロイド、我々はこの例に行ってきました今回の例であるとしましょう何であったかを教えてください。ゴシップヒューは、ターンを改革の言葉を述べました。レッツ・トークのAndroidになりました!

我々は脳回にしている人、教えてくださいすることは、具体的な例を挙げてHanlderメカニズムを使用してメッセージを送受信する方法を示し、この状回は、私たちは主に達成するために、その背後に隠された原則を確認するために、ソースコードを解析します。

我々は、それが中に位置しており、一見Handlerクラスを取るframeworks/base/core/java/android/os/Handler.javaファイル。それは、その主な機能は、変数の代入のメンバーを与えることです、我々はそれらを1つの分析を行い、複数のコンストラクタを持って、我々は一般的に使用される2つのメンバ変数の焦点を見てみましょう。

  • 最終ルーパーmLooper; //これは、メッセージ・キュー・マネージャであります
  • 最後のメッセージキューmqueueをルーパー; //これは、メッセージキューがあります

彼らの割り当ては、コンストラクタで行われ、コンストラクタは、我々は外観を実現し、他の例外処理の詳細を省略した、オーバーロードされます。

 public Handler(Callback callback, boolean async) {
     mLooper = Looper.myLooper();
     mQueue = mLooper.mQueue;
 }

あなたは、私たちは、後の章状回でクラスルーパー詳細な分析を紹介します、ここでしか説明されるように、それらはルーパーによって割り当てられ、ソースコードから実装さ見ることができます。

私たちはハンドラを見て次は、一般的に用いられる方法である、最初にそのすべてで見てのhandleMessage次のような方法、そのソースコードは次のとおりです。

   /**
     * Subclasses must implement this to receive messages.
     */
    public void handleMessage(Message msg) {
    }

私たちは、サブクラスがそれを実装するために、メッセージを受信する必要がある、これはヌル方法であることを確認するだけでなく、コメントを表示することができます。コールもありますdispatchMessage方法もLoooperがコールバックにそれを介してである、を見て必要があるhandleMessage方法は、以下がそのソースコードは、ソースコードもこれを見ることができます:

 public void dispatchMessage(Message msg) {
     if (msg.callback != null) {
         handleCallback(msg);
      } else {
          if (mCallback != null) {
              if (mCallback.handleMessage(msg)) {
                  return;
              }
          }
          handleMessage(msg);
      }
  }

関数プロトタイプと機能をリスト最後に、私たちはそれぞれの方法が似て達成するために、メッセージを送信する方法を見て、私たちは、詳細なソースコードはもはや表示されていません。

 public final boolean sendMessage(Message msg)                            //发送消息到消息队列中
 public final boolean sendEmptyMessage(int what)                          //发送空消息到消息队列中
 public final boolean sendMessageDelayed(Message msg, long delayMillis)   //延迟发送消息到消息队列中
 public final boolean sendEmptyMessageDelayed(int what, long delayMillis) //延迟发送空消息到消息队列中
 public final void removeMessages(int what)                               //删除消息队列中的消息
 public final boolean hasMessages(int what)                               //判断消息队列中是否有消息

最終的にはこの方法でプライベートを超えるメッセージを送信する方法enqueueMessage次のようにメッセージキューにメッセージを追加するには、ソースコードは次のとおりです。

private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) {
     msg.target = this;
     if (mAsynchronous) {
         msg.setAsynchronous(true);
     }
     return queue.enqueueMessage(msg, uptimeMillis);
 }

Androidのハンドラ機構に場合には、我々はここで説明する、としましょう聞く次の分解については、いずれかの例がある、教えてください!

公開された528元の記事 ウォンの賞賛131 ビュー620 000 +

おすすめ

転載: blog.csdn.net/talk_8/article/details/105173097