Handler,Message,MessageQueue,Looper之间的相爱相杀

Handler中含有Looper和MessageQueue的引用,对应关系皆为1:1,一个Handler中只拥有与之对应的一个Looper或者MessageQueue。

Looper中包含一个MessageQueue和一个Thread,对应关系为1:1

MessageQueue是一个链表结构,用来存储Message对象.对应关系为1:N

Message中对应一个Handler对象,一般为msg.target =this ,由Handler发送消息时进行赋值,对应关系为1:1


Handler机制:

子线程通过获取Handler对象,让对象将数据发送给主线程的MessageQueue中,然后主线程中的Looper通过loop()方法不断的从消息队列中取出对象交给与之对应的Handler

进行处理。


非UI线程使用:

一个普通的线程是不包含Looper的,因此在非主线程中调用Handler对象发送消息的时候我们必须先调用Looper.prepare()方法,变成一个LooperThread对象,另外不可调用两次,否则产生异常,并且别忘了在最后调用Looper.loop()方法。


Message:

Android默认提供了一个消息池让我们获取Message对象,可直接使用Message.obtain()方法从消息池中获取一个Message对象,节约资源。


MessageQueue:

equeueMessage()方法将消息加入队列

next() 读取下一条消息

removeMessage() 删除消息

quit() 退出

注意:一般情况下为了不引起不必要的内存泄露,我们在Activity的onStop()方法中调用removeCallbacksAndMessage()方法清除。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值