2021Android面试总结!安卓面试基础技能罗列

## Message 产生 用户滑动屏幕,产生了一系列 input 事件 (一个 Down 事件,若干个 Move 事件,一个 Up 事件),这些事件被系统包装成了一系列 Message(一个 Down Message,若干个 Move Message,一个 Up Message) Message 是用来传递信息的,上述 Message 中就包含了这些 input 事件的信息,比如 x 坐标,y 坐标。 ## MessageQueue 存放 Message Message 产生后,有一个问题就是这些 Message 怎么发给应用?我要滑动朋友圈,那么这些个 Message 就得传给微信,让微信去处理,微信将这些事件给到朋友圈的 List 控件,让 List 产生新内容,并且实现上下滑动。 首先想到的能不能直接把这些 Message 给到朋友圈的 List 控件(SystemServer 可以直接 Binder 发给 List 控件),可以是可以,但是麻烦;SystemServer 直接给朋友圈的 List 控件发 input message,那 SystemServer 得先知道有这么个控件,问题是应用有哪些控件,SystemServer 是不知道的,难道要遍历所有的控件,每个控件都发一个重复的 Message?这显然不是我们想要的。 SystemServer 不能直接发给控件,那么能不能直接发给应用,让应用自己去处理呢?答案是肯定的,现在的 Android 也是这么做的, **你应用准备一个 MessageQueue(消息队列),我有 Message 就放到这个 MessageQueue 里面,你应用自己去处理,岂不美哉,这就是 MessageQueue 出现的原因** ## **Looper 派发 Message** 应用准备了一个 MessageQueue 之后,SystemServer 把之前包装好的一系列 Input Message(一系列 Message(一个 Down Message,若干个 Move Message,一个 Up Message))放到了微信的 MessageQueue 里面,剩下的就让微信自己去读取 MessageQueue 里面的内容,自己更新 UI 去 问题是 MessageQueue 只是用来存放 Message 的,得有人来管理这个 MessageQueue。比如 MessageQueue 里面进了几个 Message,这些 Message 该到发给谁去处理? 这里就引入了 Looper,Looper 来决定这个 Message 该发给谁去处理,**Looper 会按照 Message 在 MessageQueue 里面的顺序,一个一个取出 Message,根据 Message 自带的信息(我想被谁处理 - target),发给对应的人去处理** 这个例子里面,这些 Message 的 target 就是微信的主线程的 handler ## **Handler 处理 Message** 这时候,Handler 出场了,上面说 Looper 把 Message 发给对应的人去处理,这个**人**就是 Handler。Handler 就是用来处理 Message 的,作为 Message 机制的最后一环,Handler 读取 Message 内容后,根据内容来做相关的处理。 这个例子里面,一系列 Input Message 最终会由微信的主线程 Handler 来处理,经过复杂的事件传递和事件分发流程,传给对应的 List 控件,List 控件根据 Input Message 里面的内容,计算出自己下一帧的各个 Item 的位置,更新自己的 Item 和 Item 内的内容,从而产生 List 滑动效果,朋友圈滑动的流程就完成了 ## Message 机制总结 有了上面的 Message 机制的案例,理解下面这张图就顺理成章了,如上面几个标题所示 1. Message 承载内容 2. MessageQueue 存放 Message 3. Looper 派发 Message 4. Handler 处理 Message ### 结尾 **最后,针对上面谈的内容,给大家推荐一个Android资料,应该对大家有用。** 首先是一个知识清单:(对于现在的Android及移动互联网来说,我们需要掌握的技术) >泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶 >注解原理丶注解原理丶序列化 >Activity知识体系(Activity的生命周期丶Activity的任务栈丶Activity的启动模式丶View源码丶Fragment内核相关丶service原理等) >代码框架结构优化(数据结构丶排序算法丶设计模式) >APP性能优化(用户体验优化丶适配丶代码调优) >热修复丶热升级丶Hook技术丶IOC架构设计 >NDK(c编程丶C++丶JNI丶LINUX) >如何提高开发效率? >MVC丶MVP丶MVVM >微信小程序 >Hybrid >Flutter ![](http://www.icode9.com/i/li/?n=2&i=images/20210710/1625920768271660.jpg) 接下来是资料清单:(**敲黑板!!!**) **领取通道在这里给你们摆上了~** ##### **[点击我的GitHub免费获取](https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)** * * * **1.数据结构和算法** ![](http://www.icode9.com/i/li/?n=2&i=images/20210710/1625920768223987.jpg) **2.设计模式** ![](http://www.icode9.com/i/li/?n=2&i=images/20210710/1625920768225798.jpg) **3.全套体系化高级架构视频**;七大主流技术模块,视频+源码+笔记 ![](http://www.icode9.com/i/li/?n=2&i=images/20210710/1625920769581295.jpg) **4.面试专题资料包**(怎么能少了一份全面的面试题总结呢~) ![](http://www.icode9.com/i/li/?n=2&i=images/20210710/1625920769495088.jpg) >不论遇到什么困难,都不应该成为我们放弃的理由!共勉~ 如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210710/1625920769322696.jpg)
上一篇:Amazon API Gateway


下一篇:微信Android客户端的卡顿监控方案