handler sendMessage /post 源码解析

258 阅读1分钟

首先我们要了解一下Looper机制:

app启动的时候,main()函数运行的时候,就为主线程创建了一个Looper ,

这个looper也是app和ActivityManegerService 通信的基础__app通过binder机制和系统服务ActivityManegerService 互通,从而实现四大组件的跳转, 而ActivityManegerService 发给app的事件就是通过handler 进一步处理的

看源码我们知道sendmessage /sendMessageDelay /sendEmptyMessage /post/postDelay最终都是执行了

sendMessageAtTime()

下面我们来看下sendMessageAtTime都做了什么?

1

2  将handler赋值给message.target

3MessageQueue中将根据message启动的时间when将message插入到message链的适当位置

MessageQueue.java

nativeWake()作用是唤醒MessageQueue.next()种的阻塞方法

pos/postDelay 源码

下面是handler分发message的时候,有callback回调的时候,则交给callback处理,这里的callback就是post的时候传入的callback

详见Android 消息机制之 MessageQueue.next() 消息取出的深入源码分析