Android面试集锦系列(33)——能讲讲Android的Handler机制吗?

作者 : 开心源码 本文共1725个字,预计阅读时间需要5分钟 发布时间: 2022-05-12 共193人阅读

Android应用程序是通过消息来驱动的,系统为每一个应用程序维护一个消息队例(MessageQueue),应用程序的主线程不断地从这个消息队例中获取消息(Looper),而后对这些消息进行解决(Handler),这样就实现了通过消息来驱动应用程序的执行。

Handler在整个Android应用中占有很重要的地方,所以面试时我们经常要考查一下面试者能否了了解它的原理,并且能够将大体的流程表述清楚,沟通和表达能力有时比技术实力更重要。

面试题:能讲讲Android的Handler机制吗?

要讲清楚Android中的消息机制,一定要先表述一下和Handler相关的少量类:

Message:消息分为硬件产生的消息(如按钮、触摸)和软件生成的消息;
MessageQueue:消息队列的主要功能向消息池投递消息(MessageQueue.enqueueMessage)和取走消息池的消息(MessageQueue.next);
Handler:消息辅助类,主要功能向消息池发送各种消息事件(Handler.sendMessage)和解决相应消息事件(Handler.handleMessage);
Looper:不断循环执行(Looper.loop),按分发机制将消息分发给目标解决者。

Handler相关类的代码量并不大,建议大家都去看一下,网上也有很多详情和分析这些源码的文章,大家自己Google一下。大家把代码过了一遍后,会更加深对整个过程的了解,讲起来就从容多了。不建议大家为了面试去背书。

面试时,假如一个人可以清楚的表达Handler的运行机制,那么我们接下来会主要问一下少量实际开发中注意的地方。比方会问在一个工作线程中创立自己的消息队例应该怎样做?

其实就是想从侧面验证他能否正的理解,能否知道要调用Looper.prepare(在每个线程只允许执行一次)。

或者者再问问能否用过HandlerThread,它有什么优缺点等。

注意:Handler可能会引起的内存泄露

在Activity中像这样创立一个Handler再正常不过了。

    private final Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {        }    };

但是,其实上面的代码可能导致内存泄露,当你使用Android lint工具的话,会得到这样的警告:

In Android, Handler classes should be static or leaks might occur, Messages enqueued on the application thread’s MessageQueue also retain their target Handler. If the Handler is an inner class, its outer class will be retained as well. To avoid leaking the outer class, declare the Handler as a static nested class with a WeakReference to its outer class

结论

诸如Handler这类耳熟能详的概念,但其实用起来又不复杂,面试时一般会更在意对方的表达上,看对方能否能用语言有效的组织语句。最后针对一个问题,还是要用一点小的细节验证对方能否正的做过。有些网友可能会觉得是被成心刁难,但假如面试官只提出一个问题,你说了答案后他就嗯一下就立即问下一主题,没有和你就这个问题再扩展一下,你能否也会觉得他什么都不懂,也会质疑他是否辨别出面试者的真实水平?

最后

在现在这个金三银四的面试季,我自己在网上也搜集了很多资料做成了文档和架构视频资料免费分享给大家【包括高级UI、性能优化、架构师课程、NDK、Kotlin、混合式开发(ReactNative+Weex)、Flutter等架构技术资料】,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

资料获取方式:加入Android架构交流QQ群聊:513088520 ,进群即领取资料!!!

点击链接加入群聊【Android移动架构总群】:加入群聊

资料大全

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Android面试集锦系列(33)——能讲讲Android的Handler机制吗?

发表回复