Handle机制
- APP的启动过程中调用ActivityThread类main方法初始化MainLooper
-
Handler创建Message并发送给Looper
image.png -
Looper循环处理MessageQueue的Message
image.png
最后message通过target找到发送消息相对应的handle进行回调处理。
- 子线程创建handle
Thread {
//初始化线程looper对象
Looper.prepare()
//初始化子线程handler,handler关联子线程looper
threadHandler =
Handler(
Looper.myLooper()!!,
Handler.Callback {
Log.i("milin", "threadHandler:${it.what}")
return@Callback true
})
//调用此方法,消息才会循环处理
Looper.loop();
//发送消息
threadHandler?.sendEmptyMessage(123)
}.start()
- 主线程Looper.loop()一直死循环,为什么没有卡死?
主要死循环中Looper.loop()中
Message msg = queue.next(); // might block
没有消息Linux底层一直在等待,不占用CPU。
具体看nativePollOnce函数分析
网友评论