深入理解Android Handler 消息机制

来源:互联网 发布:京东12g数据库网盘 编辑:程序博客网 时间:2024/05/18 15:07

消息驱动机制---Handler,MessageQueue,Looper

简单的说,Android消息驱动流程是Looper循环驱动MessageQueue,Handler则是用来收发消息。

Looper是在线程里面创建的,Android有UI线程,和非UI线程之分。首先我们看一下非UI线程创建Hander发生了什么。

主线程默认已经创建Looper。对于子线程则需要先创建Looper。

Looper.perpare() 创建Looper;并创建该Looper需要的MessageQueue和绑定的当前Thread的线程。一个Looper就必须有一个MessageQueue和Thread线程。


在线程的Run方法中创建Looper

adddd

aqqq

最终创建MessageQueue,并用当前线程绑定Looper

aqqq

然后Looper.loop() 启动Looper。便可以看到,死循环在一直读取MessgeQueue的对象,然后交给handler来处理alll


那么在主线程中Handler handler = new Handler();发生了什么事情

df

主线程是默认是有Looper对象的,Looper.mylooper方法来得到主线程的Looper对象,拿到其Messagequeue后,Handler便可以处理CallBack回调,发送和处理Message了。

不管是主线程和子线程,都要先创建Looper对象,并绑定线程创建Messagequeue,然后hanler用binder机制对message进行处理。