ITPub博客

首页 > 移动开发 > ANDROID > 面试官:看过Handler源码吗?请简单说说Android线程间消息传递机制?

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

原创 ANDROID 作者:yilian 时间:2020-03-30 11:01:51 0 删除 编辑

面试官最最常问的就是:

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

=
=

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

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


1、消息是怎么发送的?

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


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


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

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

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

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


用文字描述就是:

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

2、当 handler的 mCallback成员变量不为空时,则回调方法  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页。


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

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

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


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


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69952849/viewspace-2683291/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
人生的长跑中,跑得最远的人,可能不是跑得最快的人,而是规划了最佳行程的人 Android学习也是如此,分享Android学习内容、面试精选等,关注我,需要学习计划大纲和学习内容:xx13414521

注册时间:2019-11-05

  • 博文量
    175
  • 访问量
    178557