Handler的机制

android 的消息处理有三个核心类:  Looper,Handler   Message 。其实还有一个  Message Queue (消息队列),但是  Message Queue 被封装到  Looper 里面了,我们不会直接与  Message Queue 打交道。
l  Looper   Looper 的字面意思是“循环者”,它被设计用来使一个普通线程变成  Looper 线程。所谓  Looper 线程就是循环工作的线程。在程序开发中(尤其是  GUI 开发中),我们经常会需要一个线程不断循环,一旦有新任务则执行,执行完继续等待下一个任务,这就是  Looper 线程。
n  Looper.prepare() :现在你的线程中有一个  Looper 对象,它的内部维护了一个消息队列。注意,一个  Thread 只能有一个  Looper 对象


Looper.loop() :调用 loop  方法后, Looper 线程就开始真正工作了,它不断从自己的  MQ 中取出队头的消息  ( 也叫任务  ) 执行




Handler   handler 扮演了往  MQ 上添加消息和处理消息的角色(只处理由自己发出的消息),即通知  MQ 它要执行一个任务  (sendMessage) ,并在  loop 到自己的时候执行该任务  (handleMessage) ,整个过程是异步的。  handler 创建时会关联一个  looper ,默认的构造方法将关联当前线程的  looper ,不过这也是可以  set 的。
n  加入 Handler  后:一个线程可以有多个  Handler ,但是只能有一个  Looper




Hander 的两个特点:
n  handler 可以在任意线程发送消息,这些消息会被添加到关联的  MQ




handler 是在它关联的  looper 线程中处理消息的



通过如上步骤,就解决了  android 最经典的不能在其他非主线程中更新  UI 的问题。  android 的主线程也是一个  looper 线程  (looper   android 中运用很广  ) ,我们在其中创建的  handler 默认将关联主线程  MQ 。因此,利用  handler 的一个  solution 就是在  activity 中创建  handler 并将其引用传递给  worker thread   worker thread 执行完任务后使用  handler 发送消息通知  activity 更新  UI

                                                                      全过程







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值