如何从Android 应用深入到Framework?
路只有一条:Read the fcking source code。翻译过来读源码,
不论是看书,看博客,你的最终目的只有一个「学会看源码」,而不是「学会源码」。关于如何阅读源码,这不是一个简单的问题,我有几点经验 给大家分享:
看不懂的多读。上面已经说过了,没有人一学就会;特别是对于初学者,你刚看系统源码,肯定一头雾水;万事开头难,在你觉得艰深晦涩的时候,你就当在背课文;Android Framework的代码时遵循一定规范的,你在背了一篇课文之后,再去读别的课文,读到一半的时候就算你看不懂,很有可能你就会知道下面要讲什么了,虽然下面要讲的你也不懂。背熟了之后,你就可以想每一句是什么意思了;而这里面的「段落」、「句子」不就是普通的代码吗?就这样,一步一步串联起来,聚沙成塔,积少成多,就水到渠成了。「书读百遍,其义自现」讲的就是这道理。如果你真的想要学习Framework,一定要多读,硬着头皮读,不要放弃,否则都是扯淡。不重要的少读。看主干,尽量避免分支,那么怎么知道哪些代码是主干的呢?
这里有两层意思:其一,强调的是大局观,在初学习一个模块的时候,你需要先把握整体,再了解局部;这个场景下,所有的细节都是不重要的。
其二,那些真正不重要的逻辑;你刚学习的时候肯定没有办法知道哪些是影响不大的逻辑,所以你需要跟着书籍,博客,让前人带路;如果跟着它们的脚步走通了这条路,那你就自己独立走一遍,这时候你肯定会走丢,然后你跟踪、尝试,接着到达终点;这时候你自然就知道,哪些重要,哪些不重要。
边读边思考。学而不思则罔,思而不学则怠。带着问题去阅读源码,这里是什么意思?为什么需要这么做?这样的实现是优雅还是俗套?有没有更好的实现办法?如果我来写,我会怎么写?诸如此类,有了思考就有了自己的理解。Framework就自然很容易理解了
例如:带着这些问题去读
Handler 相关面试题:
- View.post 与 Handler.post 有何不同?
- 主进程的 Looper 是何时创建的?
- 线程关联的Looper 是如何与 Handler 绑定的?
- MessageQueue 中如何提升消息的优先级?
- 系统中的同步屏障机制是怎样的?
Binder相关面试题:
- Activity 启动时与 AMS 交互,binder 交互的细节是怎么样的?
- ActivityThread 中的 ApplicationThread 是什么作用?
- binder 交互过程中涉及到多少个线程?
- 启动过程中如果想监控 binder 交互的频率,怎么做?
- binder 交互过程中,想要监控传输数据的大小,防止数据过大造成崩溃怎么做?
AMS相关面试题
- 如何通过hook技术避开功能清单的检查
- 如何反射系统级aidl与handler
- AMS的核心原理
- AMS如何启动系统80多个重要服务
- activity的冷启动与热启动源码细节分析
- 面对巨大的Framework源码,Hook点应该如何选择
WMS相关面试题
- View的绘制流程?onMeasure职责是做什么?
- Activity如何与window与view进行分工合作的?
- onResume函数中度量高有效吗?
- 线程中view.setText一定会报错吗,为什么?
- View的绘制过程都是用的同一个canvas吗?
等等这类问题在Framework 必须掌握的, 却在大厂面试中经常问到在所有的Framework知识中,要数最重要的还是AMS,主打和Activity,Service,ContentProvider,Broadcast等交互。
看一下上图,Activity启动,涉及到ActivityThread,AMS,H类,上述过程还涉及到多次跨进程调用,涉及到各种binder的知识。搞清楚这些:我们就可以去研究各种黑科技,例如在做插件化的时候,你需要占坑Activity等,hook代码等都是在和AMS斗智斗勇;在做性能优化的时候,你也要了解AMS是如何调度Activity的,消息队列是如何运转的。**但AMS本身比较复杂、难以理解,许多工作多年的Android开发者也很难弄清AMS的作用。**于是,系统的整体运行过程就成为了大厂面试的重灾区。
比如下面这张Android启动流程图,不少人都看过,但少有人沉下心去仔仔细细的研究过
比如下面这张Android启动流程图,不少人都看过,但少有人沉下心去仔仔细细的研究过
由于图片过大不好加载,大家有需要的可以私信 回复:启动流程图 即可!!!
作为过来人,发现很多学习者和实践者都在 Android Framework上面临着很多的困扰,比如:
工作场景中遇到难题,往往只能靠盲猜和感觉,用临时性的补救措施去掩盖,看似解决了问题,但下次同样的问题又会发作,原因则是缺乏方法论、思路的指引以及工具支持;
能力修炼中,缺乏互联网项目这一实践环境,对Framework只能通过理论知识进行想象,无法认识其在工作实战中的真实面目和实操过程;
职场晋升中,只管功能开发,不了解底层原理,缺少深入地思考与总结,无法完成复杂系统设计这类高阶工作,难以在工作中大展拳脚,而有挑战的工作往往留给有准备的人。
总之,一旦遇到问题,很少人能够由点及面逆向分析,最终找到瓶颈点和最优解决方案,而Framework是Android开发的深水区,也是衡量一个Android程序员能力高低的标准。
为了帮助到大家有效率的学好 Android Framework知识点,特意整理了一份Framework的开发进阶滋尿,帮助大家在技术的道路上更进一步,大家有需要的可以私信回复 666 即可!!!
相关文章
- Frida hook 加固的 Android 应用
- Android插件实例——360 DroidPlugin具体解释
- 对照 Android 的 Intent 与 iOS StoryBoard 的 Segue - Intent 假设也能添加个prepareForSegue回调就好了
- Android 简单用户中心布局实现
- Android 移动应用性能优化 之 友盟
- 【AGC】如何指定应用发布到特定的Android系统版本
- 《Android 应用案例开发大全(第二版)》——2.6节绘制相关类
- 《Android 应用案例开发大全(第二版)》——2.9节壁纸的优化与改进
- 《Android 应用案例开发大全(第3版)》——第1章,第1.6节本章小结
- 《Android 应用案例开发大全(第3版)》——第2.8节壁纸中的着色器开发
- Android性能优化之使用线程池处理异步任务
- 《OpenGL ES应用开发实践指南:Android卷》—— 1.6 小结
- Appium支持测试原生、混合及Web Android应用
- Android学习笔记之如何对应用进行单元测试
- PhoneGap/Cordova Android应用签名公布注意事项
- [Android] android:visibility属性应用