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(),看是否有消息,没有则阻塞