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会进入休眠状态,当有消息入队的时候会被唤醒。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值