您的位置:首页 > 移动开发 > Android开发

Android Handler 详解

2016-06-25 19:54 435 查看
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会进入休眠状态,当有消息入队的时候会被唤醒。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android