Android的Handler详解

本文深入解析了Android中Handler的消息传递机制,包括消息的发送、存储、处理流程等关键环节,并探讨了消息队列、Looper的工作原理及可能引起的内存泄漏问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Handler的消息传递机制,实际上就是由handler将消息压到消息队列,并且把自身设置成msg的target,即msg.target = this。,由looper的loop方法不断取消息,取到消息后调用msg.target的分发,最后看是否是msg还是callback,如果是callback,则callback直接run起来,如果是消息,则调用handlermessage。

下面结合源码说一下这个流程图,sendmessage实际上是调用的sendMessageDelayed()方法


Delayed的代码实际上也是调用的下面的MessageAtTime方法,这个方法主要做了取队列,enqueue队列


enqueue队列前会把当前的handler设置我target,然后压倒消息队列中。


再看下他是怎么压的。


压倒队列后,looper的loop方法则会将消息取出,进行消息分发。

,这里注意下如果消息是callback的,即post的runable,这里会同步执行,要注意下,如果是普通消息,则会调用handleMessage。

也正是因为需要把handler作为target压倒队列,所以message会一直把持activity(匿名内部类会把持外部类的引用),如果消息没处理完则有可能内存泄漏,这时一般会做成静态内部类。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值