zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

如何从Android 应用深入到Framework?

Android应用 如何 深入 Framework
2023-09-11 14:18:54 时间

路只有一条:Read the fcking source code。翻译过来读源码,
不论是看书,看博客,你的最终目的只有一个「学会看源码」,而不是「学会源码」。关于如何阅读源码,这不是一个简单的问题,我有几点经验 给大家分享:

看不懂的多读。上面已经说过了,没有人一学就会;特别是对于初学者,你刚看系统源码,肯定一头雾水;万事开头难,在你觉得艰深晦涩的时候,你就当在背课文;Android Framework的代码时遵循一定规范的,你在背了一篇课文之后,再去读别的课文,读到一半的时候就算你看不懂,很有可能你就会知道下面要讲什么了,虽然下面要讲的你也不懂。背熟了之后,你就可以想每一句是什么意思了;而这里面的「段落」、「句子」不就是普通的代码吗?就这样,一步一步串联起来,聚沙成塔,积少成多,就水到渠成了。「书读百遍,其义自现」讲的就是这道理。如果你真的想要学习Framework,一定要多读,硬着头皮读,不要放弃,否则都是扯淡。不重要的少读。看主干,尽量避免分支,那么怎么知道哪些代码是主干的呢?

这里有两层意思:其一,强调的是大局观,在初学习一个模块的时候,你需要先把握整体,再了解局部;这个场景下,所有的细节都是不重要的

其二,那些真正不重要的逻辑;你刚学习的时候肯定没有办法知道哪些是影响不大的逻辑,所以你需要跟着书籍,博客,让前人带路;如果跟着它们的脚步走通了这条路,那你就自己独立走一遍,这时候你肯定会走丢,然后你跟踪、尝试,接着到达终点;这时候你自然就知道,哪些重要,哪些不重要。

边读边思考。学而不思则罔,思而不学则怠。带着问题去阅读源码,这里是什么意思?为什么需要这么做?这样的实现是优雅还是俗套?有没有更好的实现办法?如果我来写,我会怎么写?诸如此类,有了思考就有了自己的理解。Framework就自然很容易理解了

例如:带着这些问题去读

Handler 相关面试题:

  1. View.post 与 Handler.post 有何不同?
  2. 主进程的 Looper 是何时创建的?
  3. 线程关联的Looper 是如何与 Handler 绑定的?
  4. MessageQueue 中如何提升消息的优先级?
  5. 系统中的同步屏障机制是怎样的?

Binder相关面试题:

  1. Activity 启动时与 AMS 交互,binder 交互的细节是怎么样的?
  2. ActivityThread 中的 ApplicationThread 是什么作用?
  3. binder 交互过程中涉及到多少个线程?
  4. 启动过程中如果想监控 binder 交互的频率,怎么做?
  5. binder 交互过程中,想要监控传输数据的大小,防止数据过大造成崩溃怎么做?

AMS相关面试题

  1. 如何通过hook技术避开功能清单的检查
  2. 如何反射系统级aidl与handler
  3. AMS的核心原理
  4. AMS如何启动系统80多个重要服务
  5. activity的冷启动与热启动源码细节分析
  6. 面对巨大的Framework源码,Hook点应该如何选择

WMS相关面试题

  1. View的绘制流程?onMeasure职责是做什么?
  2. Activity如何与window与view进行分工合作的?
  3. onResume函数中度量高有效吗?
  4. 线程中view.setText一定会报错吗,为什么?
  5. 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 即可!!!