Android中 关于Handle 的使用及原理

最近在准备面试,在面试过程中,面试官经常会问的一些基础的知识点,如Handle的原理是什么,虽然每次都有认真去看,但是每次回答的时候都感觉 不尽人意。那么Handle 的原理到底是什么呢?使用的场景及相关概念是什么呢?今天我们就来好好分析一下Handle的机制及原理

前言

     Handle 是Android SDK 提供给开发者进行异步消息处理的类,handle的使用范围不仅仅是去在子线程去更新UI操作,只是我们经常这样使用,通常的使用方法是我们在子线程进行网络请求等操作后,由于子线程不能只是去做UI操作,所以通过handle.send xxx Message(),然后在主线程中通过handle.handlemessage() ,获取handle 分发出来的消息去做相应的处理。

   随着第三方事件总线的框架的流行,如AsynsTask ,eventBus,volley ,Retrofit等等,handle的使用相对弱化了一些,但是还是在我们编程的过程中不可缺少, 其实AsynsTask 是对Handle 进行了巧妙的封装,通过资料查询volley也是同样的原理,所以我们要弄清楚Handle的机制原理。

一:Handle机制中重要的参数    Handle  , looper,messageQueue

    Looper:(1)消息封装的载体,messageQueue是由looper来创建的,所有的handle发送的消息都是经过MessageQueue,

      looper.looper()是一个死循环,不断的从messageQueue中取出message 交给handle去消费处理,当没有message的时候 ,就阻塞,每个线程只有一个looper。

  messageQueue:消息队列,单项链表的数据结构,遵循先进先出的规制。

   Handle:负责接收l和处理消息。主要有sent和post方法。handle内部会与looper关联起来。

 总结:Handle负责发送消息,looper负责接收handle发送过来的消息,并将消息回传给handle自己去处理

          MessageQueue:是承载message的容器,是有looper创建的,和looper进行绑定。

二:消息机制的分析理解
   android 的异步处理机制就是Handle机制。

      主线程及UI线程(anctivityThread)创建的时候就创建Looper对象,创建Loopr后就开始创建MessageQueue ,也就是说主线程直接或者间接的创建looper和messageQueue。

handle的工作机制

1. handle 发送消息是调用MessageQueue 的EnQueueMeassgae方法向messageQueue中插入一条message.

2.looper不断地轮询调用MessageQueue的next方法

3、如果发现message就调用handler的dispatchMessage,如果dispatchMessage被成功调用,接着调用handlerMessage().






  

 

  

  

 


 

 

  


 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值