Android_Handler Looper Message的关系

角色描述:

Message:消息对象,Message Queue中的存放的对象。

一个Message Queue中包含多个MessageMessage实例对象的取得,通常使用Message类里的静态方法obtainMessage();它的创建并不一定是直接创建一个新的实例,而是先从Message Pool(消息池)中看有没有可用的Message实例,存在则直接取出返回这个实例。如果Message Pool中没有可用的Message实例,则才用给定的参数创建一个Message对象。调用removeMessages()时,将MessageMessage Queue中删除,同时放入到Message Pool中。

Looper:是MessageQueue的管理者。

每一个MessageQueue都不能脱离Looper而存在。每一个Looper对象和一个线程关联。通过调用Looper.myLooper()可以获得当前线程的Looper对象。

Handler:消息的处理者。

handler负责将需要传递的信息封装成Message,消息通过handler对象的sendMessage()来将该条Message放入MessageQueue中。当Looper对象看到MessageQueue中含有Message,取出该条消息发送给handler,进而调用相应的handler对象的handleMessage()方法对其进行处理。

工作原理:

我们只要将最新的数据放到Handler所关联的LooperMessageQueue中,线程(UI线程或非UI线程)Looper一直在进行Loop操作从MessageQueue中读取符合要求的Message给属于它的target Handler来处理!所以啊,一旦有符合要求的Message,就第一时间将Message交给该Handler来处理!

简单一点说就是:

线程(UI线程或非UI线程)提供MessageQueueLooper从其中读Message,然后交由Message自己的Handler来处理!最终被Handler中的handlMessag(Message msg)方法处理!如下图所示:

小结:

一个Looper对应一个MessageQueue

一个线程对应一个Looper

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值