美文网首页
Handler原理之流程图分析(面试杀手,源码级分析)

Handler原理之流程图分析(面试杀手,源码级分析)

作者: 小仙女喂得猪呀 | 来源:发表于2021-12-19 16:25 被阅读0次

一.Handler在不同线程之中的创建
主线程:


WechatIMG16268.png

子线程:


WechatIMG16210.png

消息处理流程:


WechatIMG16213.png

二.带着问题去总结
(一). Handler的意义
Hander本身就是一个大熔炉,将Looper,Message,MessageQueue,ThreadLocal维护起来的,形成一个完整的消息通信机制,handler创建在哪个线程中,并且初始化当前线程的looper,可以在别的线程中,通过此handler发送消息,在创建线程中接收消息,达到消息通信的效果

(二).Looper和MessageQueue的关系:
Looper.prepare() 执行的时候分为三步:
一.Looper和MessageQueue的关系:Looper.prepare() 执行的时候分为三步:
1.判断当前线程是否已经存在looper
2.初始化looper,并且初始化MessageQueue
3.利用初始化的成员变量ThreadLocal的set方法传入Looper对象,并且用ThreadLocalMap将looper和当前ThreadLocal进行绑定,set方法中将Thread中的成员变量 ThreadLocal.ThreadLocalMap threadLocals 赋值,所以在ThreadLocal的get方法中可以取出当前Thread对应的ThreadLocalMap,然后就Looper就可以通过get方法通过线程池拿到当前thread对应的loop

(三).message是和MessageQueue的关系,message在消息通信的过程中经历了哪些过程?
Handler调用sendMessage方法去发送消息,几个发送消息的方法最后都执行了enqueueMessage(@NonNull MessageQueue queue, @NonNull Message msg, long uptimeMillis)
最后执行到MessageQueue中的enqueueMessage方法以链表的形式来到MessageQueue中,通过Looper.loop()中的死循环不断从MessageQueue的next()方法中取出message,最后利用message对应的target(handler)来dispatchMessage(msg)

相关文章

网友评论

      本文标题:Handler原理之流程图分析(面试杀手,源码级分析)

      本文链接:https://www.haomeiwen.com/subject/zrjzfrtx.html