阅读Handler源码笔记

来源:互联网 发布:全途打单软件下载 编辑:程序博客网 时间:2024/06/05 01:55

  学习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