Handler机制和底层实现

Handler机制和底层实现_第1张图片

上面一共出现了几种类,ActivityThread,Handler,MessageQueue,Looper,msg(Message),对这些类作简要介绍:

ActivityThread:程序的启动入口,该类就是我们说的主线程,它对Looper进行操作的。

Handler:字面意思是操控者,该类有比较重要的地方,就是通过handler来发送消息(sendMessage)到MessageQueue和 操作控件的更新(handleMessage)。handler下面持有这MessageQueue和Looper的对象。

MessageQueue:字面意思是消息队列,就是封装Message类。对Message进行插入和取出操作。

Message:这个类是封装消息体并被发送到MessageQueue中的,给类是通过链表实现的,其好处方便MessageQueue的插入和取出操作。还有一些字段是(int what,Object obj,int arg1,int arg2)。what是用户定义的消息和代码,以便接收者(handler)知道这个是关于什么的。obj是用来传输任意对象的,arg1和arg2是用来传递一些简单的整数类型的。

下面,我们按照启动顺序来进行源码分析:

Handler机制和底层实现_第2张图片

 

先获取looper,如果没有就创建

创建过程:

ActivityThread 执行looperMainPrepare(),该方法先实例化MessageQueue对象,然后实例化Looper对象,封装mQueue和主线程,把自己放入ThreadLocal中

再执行loop()方法,里面会重复死循环执行读取MessageQueue。

接着ActivityThread 执行Looper对象中的loop()方法

此时调用sendMessage()方法,往MessageQueue中添加数据,其取出消息队列中的handler,执行dispatchMessage(),进而执行handleMessage(),Message的数据结构是基于链表的

你可能感兴趣的:(android线程及进程)