Android消息机制之Handler

Android消息机制

Android进程消息模型

      Android没有全局的消息队列,消息队列是和某个线程相关连在一起的,每个线程最多有一个消息队列,消息的取出和处理,也是在这个线程本身中完成。也就是说,在Android中,如果你想在当前线程使用消息模型,则必须构建一个消息队列,而消息机制的相关主要类是:

      1. Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列);
      2. Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息;
      3. Message Queue(消息队列):用来存放线程放入的消息。
    4. Message:Message是消息的载体,Message设计成为Parcelable类的派生类,这表明Message可以通过binder来跨进程发送。

Message的创建

     通常我们都会用obtain()方法去创建Message,如果消息池中有Message有,则取出,没有,再重新创建。这样可以防止对象的重复创建,节省资源。创建之后的Message可以存放返回给主线程的信息和数据。

Message的发送

     Message的发送是通过Handler来进行发送的,Handler可以携带消息返回主线程,Handler发送消息是通过两种方式,一种方式是send,一种方式是post。、
     通过Handler,消息会被存放在主线程的Message Queue中,等待主线程的处理。
Send方式
                                   send方式主要方法
Post方式
                                   post方式主要方法

消息的处理

     此时Looper会将Message从Message Queue中取出,交给发送Message的Handler处理,然后Handler会调用handlerMessage()方法接受消息。

总结

     在android线程通信过程要弄清楚以下几点:
          1. Looper用来遍历Message Queue中的Message,将其中的Message取出交由对应的Hanlder来处理;
           2. Message Queue是存储消息的容器,Handler发送的消息暂时存放在这里等待处理;
           3. 只有主线程的Looper和Message Queue是创建好的,其他线程需要人为创建;
           4. Looper类提供了prepare方法来创建Looper,每个线程只有一个Looper,在Looper的构造方法中,又创建了与它一一对应的MessageQueue,所以MessageQueue也是唯一的;
           5. Handler在线程之间的通信中起到两个作用,第一个是发送消息,第二个处理其发送的消息。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值