Handler,Loop,MessageQueue的工作原理

为了更好地理解Handler的工作原理,下面先介绍一下与Handler一起工作的几个组件.

> Message: Handler接受和处理的消息对象.

>Looper :每个线程只能拥有一个Looper.他的loop()方法负责读取MessageQueue中的消息,读到消息之后把消息发送给该小小的Handler进行处理.

>MessageQueue:消息队列,他采用先进先出的方式管理Message.程序创建Looper

对象时,会在它的构造器中创建MessageQueue对象.Looper的构造器代码如下:

private Looper()

{

mQueue=new MessageQueue();

mRun=true;

mThread=Thread.currentThread();

}

该构造器采private修饰,表明程序员无法通过构造器创建Looper对象.从上面的代码不难看出,程序在初始化Looper时会创建一个与之关联的MessageQueue,这个MessageQueue就负责管理消息.

> Handler:它的作用有两个-----发送消息和处理消息,程序使用Handler发送消息,由Handler发送的消息必须被送到指定的MessageQueue.也就是说,如果希望Handler正常工作,必须在当前啊线程中有一个MessageQueue;否则消息就没有MessageQueue进行储存了.不过MessageQueue是由Looper负责管理的,也就是说,如果希望Handler正常工作,必须在当前线程中由一个Looper对象.为了保证当前线程中由Looper对象,可以分如下两种情况处理.

>在主UI线程中,系统已经初始化一个Looper对象,因此程序员直接创建Handler即可,然后就可以通过Handler啦i发送,处理消息.

>程序员自己启动的子线程,必须自己创建一个Looper对象,并启动它.创建Looper对象调用他的prepare()方法即可.

归纳起来,Looper,MessageQueue,Handler各自的作用如下.

>Looper:每个线程只有一个Looper,他负责管理MEssageQueue,会不断从MeaasgeQueue中读取消息,并将消息分给对应的Handler处理.

>MessageQueue:由Looper负责管理.采用先进先出的方式来管理Message.

>Handler:它能把消息发送给Looper管理MessageQueue,并负责处理Looper分给他的消息.

在线程中处理Handler的步骤如下.

1.调用Looper的prepare()方法为当前线程创建Looper对象,创建Looper对象时,他的构造器会创建与之配套的MessageQueue.

2.有了Looper之后,创建Handler子类的实例,重写handleMessage()方法,该犯法负责处理来自其他线程的消息.

3,调用Looper的loop()方法启动Looper.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值