handler

Handler


机制

  1. android提供了handler和looper来满足线程间的通信。每一个handler都必须关联一个looper
  2. handler负责处理绑定到该线程中的message,looper负责从其内部的messageQueue(消息队列)中拿出一个个的message给handler进行处理。因为handler是在UI线程中实现的。所以经过handler和message机制就可以回到UI线程中了

角色

  1. handler:处理后台进程返回数据的工作人员,你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从MessageQueue取出所送来的消息
  2. message:后台进程返回的数据,里面可以存储bundle等数据格式
  3. messageQueue:是线程对应looper的一部分,负责存储从后台线程中抛回的和当前handler绑定的message,是一个队列
  4. looper:一个线程可以产生一个looper对象,looper相当于一个messageQueue管理人员,它不停的循环遍历messageQueue队列,然后将符合条件的message一个个的拿出来交给handler处理
    【注意】handler是在UI线程中声明的,如果我们直接用类似代码执行一个线程的话,实际上并没有创建一个新的线程,因为handler已经跟默认的UI线程中的looper绑定了

使用场景

子线程和主线程之间通信的工具,例如,网络图片加载,耗时请求等操作,子线程和UI线程交互编辑控件属性等。一般在主线程中定义,将一些耗时的操作放在子线程,防止系统ANR异常。

分发消息的方法

  1. post(Runnable)
  2. postAtTime(Runnable , long) –> handler.postAtTime(r,System.currentTimeMillis()+100000);
  3. postDelayed(Runnable , long) –> handler.postDelayed(r,2000);
  4. sendEmptyMessage(int)
  5. sendMessage(Message)
  6. sendMessageAtTime(Message , long)
  7. sendMessageDelayed(Message , long)

示例

不是很难,网上有很多handler示例,例如进度条控制之类的,请自行百度吧。

补充图示

在网上看到了些很形象的图示,拿来补充分享
UI更新
很形象
也许能解决你一些困惑

转载请注明出处http://blog.csdn.net/zifeng1203s/article/details/44099553

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值