Android开发经验谈

Handler、Looper、MessageQueue、Mess

2020-04-10  本文已影响0人  大虾啊啊啊

Handler的原理涉及到了几个重要对象:
Looper、MessageQueue、Message、Handler。

1、Looper用于轮询消息
2、MessageQueue消息队列:存消息
3、Message:消息对象
4、Handler:发送消息和处理消息
处理消息的步骤:

        Looper.prepareMainLooper();
  private static void prepare(boolean quitAllowed) {
        if (sThreadLocal.get() != null) {
            throw new RuntimeException("Only one Looper may be created per thread");
        }
        sThreadLocal.set(new Looper(quitAllowed));
    }
   private Looper(boolean quitAllowed) {
        mQueue = new MessageQueue(quitAllowed);
        mThread = Thread.currentThread();
    }
  Looper.loop();
      for (;;) {
            Message msg = queue.next(); // might block
            if (msg == null) {
                // No message indicates that the message queue is quitting.
                return;
            }


 msg.target.dispatchMessage(msg);


  /**
     * Handle system messages here.
     */
    public void dispatchMessage(@NonNull Message msg) {
        if (msg.callback != null) {
            handleCallback(msg);
        } else {
            if (mCallback != null) {
                if (mCallback.handleMessage(msg)) {
                    return;
                }
            }
            handleMessage(msg);
        }
    }

发送消息的步骤:

    private boolean enqueueMessage(@NonNull MessageQueue queue, @NonNull Message msg,
            long uptimeMillis) {
        msg.target = this;
        msg.workSourceUid = ThreadLocalWorkSource.getUid();

        if (mAsynchronous) {
            msg.setAsynchronous(true);
        }
        return queue.enqueueMessage(msg, uptimeMillis);
    }

上一篇 下一篇

猜你喜欢

热点阅读