阅读Handler源码笔记

  学习android大半年了,今天才去阅读Handler源代码真是惭愧啊!哭

  安卓有一道经典的面试题就是问Handler运行机制原理。包括和Looper,Thread,MessageQueue和Message之间的关系。之前不知道为什么没有去看源代码,只是简简单单的从网上搜了一下他们之间的关系,就天真的认为自己清楚了,哎,真是天真到了极点。


  总结一下今天阅读Handler源码的收获:

  1.Handler的作用?

  翻译一下源码中的注释:1.Handler可以设置Message或者Runnable在未来某个时刻运行。2.Handler可以让你在当前线程之外的线程中执行你要执行的动作。(英文水平有限,只能大概翻译一下啦!)

  2.Handler与线程的关系?

  每一个Handler实例与唯一的一个线程和这个线程的MessageQueue关联。也就是Handler和线程是一对一的关系,当然线程和Handler是一对多的关系了。

  3.Handler与Looper的关系?

  先说一下Looper和Thread的关系,一个Thread只能有一个Looper,他们是一对一的关系。Handler实例包含了一个Looper对象,所以Handler和Looper也是一对一的关系。注意:创建Handler对象时,所在的线程必须有Looper,否则会创建失败,可通过调用Looper.prepare创建线程的Looper。

  4.Handler与MessageQueue的关系?

  一个Looper拥有唯一的MessageQueue,所以Handler与对应Looper的MessageQueue相关联。Handler负责把要执行的Message放入MessageQueue中去。

  5.Handler与Message的关系?

  Handler与Message的唯一关系,就是把Message放入MessageQueue当中。同时,Handler会把Message和自己关联起来,Message对象中会存有Handler的一个引用。

  6.Handler的运行机制原理?

  Handler将Message放入MessageQueue当中,Handler所对应的Thread中的Looper通过循环不断从MessageQueue中取出Handler放入的Message,Message通过自身关联的Handler对象执行dispatchMessage(Message msg)方法完成所要执行的动作。

  7.MessageQueue与Message的关系?

  MessageQueue维护了一个Message的链表。



  



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值