Looper

Android 的消息驱动,真正的实现位于native层,framewokr层在native层的基础上做了封装。为了防止混淆,将native层的looper记做NativeLooper。

framework层消息驱动流程:

  • 发送消息:

    1 线程想发送消息,需要拿到Handler对象,调用Handler.sendMessage()发送消息

    2 Handler内部有MessageQueue对象,根据一定规则将Message添加到MessageQueue

    3 调用MessageQueue的nativeWake(),通知Looper可以处理消息了

  • 处理消息:

    1 调用Looper.loop()开始处理消息

    2 调用MessageQueue.next()取出一条可以处理的消息

    3 调用MessageQueue.pollOnce(),看是否有消息,没有则阻塞

    4 拿到消息后,将消息分发给Handler

native层消息驱动流程:

  • 发送消息:

    1 调用NativeLooper.sendMessage()发送消息

    2 将消息添加到NativeLooper.mMessageEnvelopes中

    3 调用NativeLooper.wake(),通知NativeLooper可以处理消息了

  • 处理消息:

    1 调用NativeLooper.pollOnce(),看是否有消息,没有则阻塞

results matching ""

    No results matching ""