面试官:看过Handler源码吗?请简单说说Android线程间消息传递机制?

面试官最最常问的就是:

看过Handler源码吗?请简单说说Android线程间消息传递机制?

=

这种情况下,首先我们要先理清回答的思路,然后用我们的结构化思维去征服面试官!(心虚~)

(一脸谄媚的)我:是这样的,Android线程间消息传递主要大体可以分为以下几个部分:消息发送、消息循环、消息分发,接下来我具体讲讲这三个部分的实现逻辑。

1、消息是怎么发送的?

这个问题还可以进行引申:发送延迟消息的方式是延迟插入呢,还是延迟执行?具体回答我也写在流程图上了,自己总结吧~

2、怎么进行消息循环的?

从这里我们也可以知道,平时我们通过postDelay发送的消息,是不会被精确执行的。

假设有一条消息执行时间太长,处理完它再来处理下一条消息的时候,可能已经过了下一条消息规定要执行的时间了。

扫描二维码关注公众号,回复: 10397257 查看本文章

3、怎么处理分发消息的?

消息发送这个流程很简单,就不画图了。祭上代码:

用文字描述就是:

1、当msg.callback不为空时,回调msg.callback.run()方法

2、当handlermCallback成员变量不为空时,则回调方法 mCallback.handleMessage(msg),如果返回true,直接结束;否则,执行步骤3

3、调用Handler自身的handleMessage(),也就是我们经常复写的方法;


其他问题

1、子线程的Looper和主线程的Looper有什么区别?

答:

  • 子线程的Looper可以退出,主线程的Looper不可以退出
  • 子线程的Looper你要自己去prepare,自己去创建,但是主线程的Looper默认帮你创建了

talk is cheap ,上图~

2、MessageQueue是怎么创建的?

答:MesageQueue是在底层调用native方法去创建的,本质是一个单链表;

3、Handler的消息延迟是怎么实现的?

  • 消息队列按照消息触发时间(msg.when)排序
  • native通过设置epoll_wait的超时时间,使其在特定时间唤醒
  • 延时精度其实不高

4、了解过IdleHandler吗?能说说原理?

关于IdleHandler在下篇文章结合源介绍,这里大家就先知道IdleHandler可以实现是当主线程的空闲时执行逻辑的一种方式。

本文不足

其实线程通信还涉及到很多native层的交互,完整的架构应该是这样的:

大家有兴趣可以去看gityuan大神的文章,五星推荐~~~

当然,面试的时候面试官问的问题可不止这一个,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊~

贴心的我给大家带来了面试题合集

【2017-2019字节跳动面试真题解析&简历制作PDF模板】

针对字节跳动的面试题整理的,进行了分类,循序渐进,由基础到深入,由易到简。

将内容整理成了五个章节、计算机基础面试题、数据结构和算法面试题、Java面试题、Android面试题、其他扩展面试题、非技术面试题总共五个章节354页。


【2017-2019字节跳动面试真题解析&简历制作PDF模板】关注我看个人介绍,或直接私信我免费领取

每个问题都附上1个标准参考答案,都是反复摸索消化(真心花了很多时间),觉得写的比较好的文章作为答案。

来节省大家自己去搜索的时间,把时间用在正确的东西上。。

还整理了全套简历制作、春招困惑、HR面试等问题解析参考建议,都是福利分享给大家。

发布了168 篇原创文章 · 获赞 71 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Aerfa789/article/details/105194293
今日推荐