你是否在 Android Framework 技术点上栽过跟头?
Posted 冬天的毛毛雨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你是否在 Android Framework 技术点上栽过跟头?相关的知识,希望对你有一定的参考价值。
android Framework 应该是每个Android 开发都需要熟知的知识点,不仅在开发中需要用到这方面的技术,面试中也是面试官最喜欢问的点,也是用来衡量 Android 开发级别的关键。
尤其是 Binder、Handler、Zygote进程、AMS、PMS、WMS等知识点,都是面试中问的比较多,像近几年的面试问的也越来越深入,比如一下问题,看看你能否第一时间答上来:
- Android中多进程通信的方式有哪些?
- 进程通信你用过哪些?原理是什么?
- 描述下Binder机制原理?
- Binder线程池的工作过程是什么样?
- Handler怎么进行线程通信,原理是什么?
- Handler如果没有消息处理是阻塞的还是非阻塞的?
- handler.post(Runnable) runnable是如何执行的?
- handler的Callback和handlemessage都存在,但callback返回true handleMessage还会执行么?
- Handler的sendMessage和postDelay的区别?
- .……
然后面试会接着这些知识点相关的更深层次深挖,直到你的技术边际,来了解你的真实水平。
像上面这些面试题大多数开发都应该遇到过,但我能肯定的是有不少人很难全部回答上来。因为他们对Android Framework框架原理掌握的不是很熟练,就像下面这位网友遇到的问题。
如果非要总结Framework学习中的问题,大家遇到的困惑无非是这些方面:
1.开发遇到Bug,百度不到,而你不懂框架里面的黑盒机制
2.项目代码想到哪写到哪,每次迭代就是一场轮回?你不想知道Android这么庞大的源码体系是怎么设计的?
3.学完就忘,不会使用,原理结合实战通过Framework学习知识点的使用。
如何快速地学习、梳理Framework知识体系呢?
常见的学习方法有下面几种:
- 阅读书籍(方便梳理知识体系,但对于解决问题只能提供方向)。
- 直接阅读源码(效率低,挑战难度大)。
- 打Log和打堆栈 (效率有所提升,但需要反复编译,添加Log和堆栈代码)。
- 直接联调,实时便捷(需要调试版本)。
首先可以通过阅读相关的书籍进行学习,其中主要的知识体系有Linux操作系统,比如进程、线程、进程间通信、虚拟内存,建立起自己的软件架构。
在此基础上学习Android的启动过程、服务进程SystemServer的创建、各个服务线程(AMS/PMS等)的创建过程,以及Launcher的启动过程。熟悉了这些之后,你还要了解ART虚拟机的主要工作原理,以及init和Zygote的主要工作原理。
之后随着在工作和实践过程中你会发现,Framework主要是围绕应用启动、显示、广播消息、按键传递、添加服务等开展,这些代码的实现主要使用的是Java和C++这两种语言。
通过书籍或者网络学习文档一段时间后,你会发现很多问题都没有现成的解决方案,而此时就需要我们深入源码中进行挖掘和学习。但是除了阅读官方文档外,别忘了调试Framework也是一把利刃,可以让你游刃有余快速定位和分析源码。
我这有份 Android Framework 深度源码解析的学习曲线,大家可以参考看看:
如果真想掌握好 Android Framework 框架知识点,学习路线和学习文档肯定是少不了,为了帮助大家节省学习周期的时间,收集整理了这份《Android Framework 源码解析》,希望帮助大家在技术的道路上更进一步。已经全部整理收录好了,大家需要参考学习完整版,请去我 GitHub 进行查阅。
GitHub地址:
https://github.com/733gh/Android-T3
GitHub地址:
https://github.com/733gh/Android-T3
以上是关于你是否在 Android Framework 技术点上栽过跟头?的主要内容,如果未能解决你的问题,请参考以下文章
炸了,腾讯技术团队新作《Android Framework源码解析》首次开源分享,带你参透Android源码的终极奥义
疫情裁员下,字节Android高工所需要掌握的技术,裁员后的你是否能重新加入高工圈
腾讯资深Android开发带你入门面试重点Framework,掌握更加核心的技术
收藏这份Android Framework开发入门指南,带你步入Android系统开发的殿堂