Android Handler 详解

Handler适用于线程间交互的一种机制。牵扯到四个类:Handler,Looper,MessageQueue,Message。
这四个类关系如下图所示:
这里写图片描述
这个图自己画的,比较简易,但是很能说明他们的关系
Handler:用于线程之间发送消息,一般Handler在主线程中被创建,而后和UI线程绑定。其他子线程完成了耗时任务需要使用“sendMessage”发送消息到消息队列。
MessageQueue:消息队列,先进先出原则。
Looper:消息队列管理者,不停的循环检查MessageQueue内的消息,并发送到主线程。
Message:消息对象,存放各种信息。
PS:
1、Handle在所在的线程必须拥有Looper,否则会报异常。一般可以直接在UI线程使用,因为UI线程有MyLooper 对象,而新的子线程却没有。
2、每个线程可以拥有多个Handler对象,却只能有一个Looper对象。看下面的源码就知道了,如果有了Looper再创建会抛出异常。
这里写图片描述
3、在其他子线程中若想使用需要调用Looper的prepare()方法来初始化当前线程的Looper,然后运行loop()方法操作消息队列,如下图。
这里写图片描述
4、Looper的loop方法内有一个死循环用于检测消息队列,当消息队列没有消息的时候,looper会进入休眠状态,当有消息入队的时候会被唤醒。

猜你喜欢

转载自blog.csdn.net/hello_12413/article/details/51759787
今日推荐