Android handler loop源码详解

网上很多文章介绍handler 跟 looper,看别的人 总归没有自己记录一下印象深刻些,因此在此记录一下

简单new一个handler,跟进源码可以看到里面有几个重载方法,最终都是调用这个方法

这里核心的代码 就是 mLooper = Looper.myLooper(); 然后通过mLooper.mQueue获取消息队列,Looper等会再说

全局搜一下这个mQueue 就会发现,所有的删除、接收、发送消息,其实就是对mQueue这个消息队列进行处理

删除:

发送:

不管是post,还是sendmessage...跟进去一下,最后都是调用mQueue.enqueueMessage方法,把消息存到消息队列里面

再来说说Looper

首先要明确的是 所有线程有且只有一个Looper,应用在启动的时候,系统就自己给我们创建了一个Lopper并与主线程绑定了

Looper 主要有perpare跟loop两个方法

perpare 方法主要是初始化lopper,将普通线程变为looper线程并创建消息队列

loop方法主要是在消息队列里面循环取数据(重新整理了一下,只保留关键代码)

可以看到,这是一个死循环,如果消息队列里面有消息,就调用msg.target.dispatchMessage

msg.target就是handler,最终就是回调我们常见的handleMessage方法

对了  主线程一直也在执行loop方法,之所以没有OOM,是因为线程一直在执行,并且,可以休眠

到此,结束

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值