安卓Handler机制

Posted by RedLeaves on May 27, 2021

机制

其他

  • Handler有sendMessage和post两种用法,但本质上都是Message,post是通过sendMessage实现的
    1
    2
    3
    
    public final boolean post(@NonNull Runnable r) {
      return  sendMessageDelayed(getPostMessage(r), 0);
    }
    
  • sendMessage最后都是通过enqueueMessage将Message加入Message Queue的
  • Looper.loop是一个死循环,负责消息分发
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    public static void loop() {
      // ...
      for (;;) {
          Message msg = queue.next(); // might block
          // ...
          msg.target.dispatchMessage(msg);
          // ...
          msg.recycleUnchecked();
      }
      // ...
    }
    
  • Handler有sendMessage和post两种用法,dispatchMessage针对两种用法分别实现
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    public void dispatchMessage(@NonNull Message msg) {
      if (msg.callback != null) {
          handleCallback(msg);
      } else {
          if (mCallback != null) {
              if (mCallback.handleMessage(msg)) {
                  return;
              }
          }
          handleMessage(msg);
      }
    }
    
  • mCallback在构造Handler时传入,作用和重载handleMessage函数一样

参考文档