Android线程机制Handler

一、Handler是什么?
Handler是一套更新UI的机制,也是一套消息处理机制。
android的主线程(界面线程)和work线程机制可以避免多线程导致线程并发的带来的混乱问题,而Handler在线程通信中起到了至关重要的作用。

二、Handler、Looper、MessageQueue、Message关系:(线程机制中各要素的关系)
handler先跟默认线程的looper关联,将message传送给looper的messageQueue中,然后通过looper.loop方法不断将messageQueue中的message直接回传给handler的handlerMessage方法进行处理,而handleMessage方法是在ui线程中执行了。

三、主线程和子线程通过handler进行通信:

1、实例化一个HandlerThread对象(HandlerThread类很好的避免了多线程并发使得threadHandler在于线程looper关联时,looper为空的情况。),使得子线程threadHandler能够与当前线程的looper进行关联,在子线程的handler的handleMessage方法中处理由主线程handlerMessage方法中自己发给自己的逻辑,而在该handleMessage方法中打印当前线程会发现是在子线程中执行的。

 

2、下图是主线程的handler,在handleMessage方法中通过子线程threadHandler发给子线程自己需要处理的消息:


简单讲就是主线程通过子线程中实例化的threadHandler给子线程发送消息,从而实现了主线程与工作线程的通信。

 

四、Handler常见问题

常见问题:

1、工作线程中handler实例化会出现looper空指针的异常,因为没有实例化looper

2、在非UI线程中执行了ui操作报异常

猜你喜欢

转载自592368370.iteye.com/blog/2191200