专栏首页闷骚的程序员Android 源码分析开篇

Android 源码分析开篇

在心中谋划已久的此事终于要开篇了,虽然迟了点,十年前没有种的树,就从现在开始种吧。

自 2014 年底从 Windows 开发转向 Android 开发以后,到现在的两年多时间里,也陆陆续续看了一些强相关的书籍和教程,按我在豆瓣标记的时间顺序:

  • 《Android Programming: The Big Nert Ranch Guide》
  • 《疯狂 Java 讲义》
  • 《疯狂 Android 讲义》
  • 《Android 软件安全与逆向分析》
  • 《深入理解 Java 虚拟机》
  • 《Android Training》
  • 《Android 开发艺术探索》
  • 《Android 群英传》
  • 《App 研发录》

再加上平时在 GitHub 和掘金等技术社区的晃荡,接触过的资料其实也不少了,但回想起年初找工作的时候一些比较失落的经历,自身存在一些很要命的问题,就是如自己一直也知道的那样:

  1. 技术的广度还可以,可深度不够,不够聚焦;
  2. 掌握的知识是散乱的,不成体系,禁不住往深了问。

这一方面归因于自己的学习方式需要优化,技术书籍的学习不能只是通读,精读、主题阅读和针对性的实践总结一样不能少;另一方面挑选书籍要更有目的性,最好是明晰的由浅入深的层次递进;还有就是市面上流行的书籍和网络上的技术分享恐怕都无法让我彻底改善这种情况。

这个尴尬的年纪,在一个个焦虑的夜晚,躺在床上听着窗外偶尔传来的狗叫,汽车的呼啸,也会对自己呐喊,我不要做一个会用九种语言写 Hello World 但无一精通的程序员,迫切需要 聚焦精通成体系

一切就从自己的工作内容最相关的业务与技术开始入手。业务相关的知识可以在工作时间来积累,业余的时间里,多 Read The F*cking Source Code,从优秀的源码和设计里汲取营养。有 AOSP 这样包罗万象的宝藏在侧,也无需纠结和寻觅到底应该看些什么,里面程序设计语言、设计模式、架构模式等等,应有尽有。

所以,最近计划开始写一系列 Android 源码分析的文章,包括 Android 系统源码及一些优秀的第三方类库等等。这将是一个比较漫长的过程,需要一个脉络,可选的方式是自底向上和自顶向下:

自底向上,一开始就是啃硬骨头,理解各种底层概念和知识,对我这样的选手来讲,容易失去兴趣,但是后期理解上层的东西更顺畅,毕竟基础知识点已经铺垫好了。比如《老罗的 Android 之旅》,就是比较典型的采用这种方式的。

 ^ 难度
 |    ---
 |   /   \
 |   |   |
 |  /    |
 |  |    |
 | /     |
 | |     |
 | |     +-----------------
 |/
 +------------------------->
                        时间

自顶向下,预计是需要从几个熟悉的话题展开,充分下探之后,基础知识大致铺垫开,后面才会比较容易。这样做的一个好处是比较有目的性,总是知道下一个步要去找些什么,看些什么;另一点是从熟悉的东西讲起,前期曲线比较平滑。

 ^ 难度
 |              _
 |            _/ |
 |          _/    \
 |        _/       \
 |       /          \
 |     _/           |
 |   _/              \
 | _/                 \----
 |/
 +------------------------->
                        时间

自认为没有恒心与毅力像罗升阳那样自底向上面面俱到地把 Android 的各个方面都分析一遍,我的大致的思路是打算从我们最常用的一些类开始,自顶向下摸索,牵扯到哪些需要深入理解的知识点,就另开一篇详细说明,这个过程类似 JVM 的 GC 中采用的可达性算法,只要选好了 GC roots,无论是深度优先还是广度优先,天长日久,总会覆盖所有我们常用的技术及其内部的原理。

举个例子,比如我第一篇打算分析 Toast 类,那由它展开可能会逐渐讲到很多的话题:

Toast
|
|--- Handler
|    |
|    |--- Communicating with the UI thread
|    |
|    |--- Looper/Message/MessageQueue
|         |
|         |--- ThreadLocal
|
|--- Binder
|    |
|    |--- ServiceManager
|    |
|    |--- Inter-process communication
|    |
|    |--- ...
|
|--- Update UI outside the main thread
|
|--- ...

每介绍一篇,可能会发散出一些本篇中涉及但是没有深入讲解的知识点,留待后续补上,我将在文章最后把这些知识点列出来。在当前文章中需要提到的地方,就插个桩,留个尽量恰当的比喻在那里,「把它当作 XXX 理解就好了」。

当暂时沿着某一个主题延伸不下去,又没有找到合适的新主题的时候,就按一些比较有体系的主题来写,比如「Android 里的设计模式」,可以单独写一个系列。

这样做的目的,主要是想进行一些比较深入的学习和对过往知识的整理,将一个一个散落的知识点孤岛串联起来,让它们成为我的技能战斗群,写着应用代码时能对表面之下的原理了然于胸,减少写代码时对猜测和调试的依赖,对每一个我敢写出来的技能点,都能自信满满地与人对谈。

目前的计划是按照我最近一段时间更新公众号的频率,大约十天更新一篇,阅读源码主要使用的工具和方式是:

大致思路就是这样,实践一阵试试。不知道自顶向下的方法是否走得下去,要是实在不行,还是乖乖回去跟着老罗的脚步学习吧。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android Studio 遇到问题集锦

    Android Studio First Run 检测 Android SDK 及更新,由于众所周知的原因,我们会「Unable to access Andro...

    mzlogin
  • Java 中的比较运算符

    这时 Android Studio 不高兴了,在 long 下面打上红色波浪线,然后提示小菜鸟:

    mzlogin
  • 使用 jsDelivr 免费加速 GitHub Pages 博客的静态资源

    挺久以前就有网友给我的 GitHub Pages 博客模板提 Issue,说希望能增加 CDN 用于加速静态资源的加载,由于懒,一直没有动。

    mzlogin
  • Android 关于移动互联网寒冬和个人核心竞争力的看法

    移动互联网寒冬 关于 Android 市场需求,其实从前年开始 Android 就处于寒冬的境地,最直观的标志就是,工作不那么好找了。因为前几年移动互联网开始流...

    用户1269200
  • Android 关于移动互联网寒冬和个人核心竞争力的看法

    关于 Android 市场需求,其实从前年开始 Android 就处于寒冬的境地,最直观的标志就是,工作不那么好找了。因为前几年移动互联网开始流行,很多创业公司...

    developerHaoz
  • 远程调试 Android 设备使用入门

    By Kayce Basques Technical Writer at Google

    一个会写诗的程序员
  • 如何成为Android高手 博客分类: 经典文章转载 Android互联网中国移动网络应用应用服务器

    若立志成为Android高手 ,如有耐心,“一瓶一钵足矣”。   “天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则...

    chroya
  • Android Q Beta 6 终极测试版发布!

    其中,Android的更新速度要比iOS更快,系统的功能也更加丰富多样。从推出至今,Android已经发布更迭了10个系统版本。Android Q Beta 6...

    终端研发部
  • 提示Android Q Beta 3 亮相 Google I/O'19

    I/O'19 期间 Android 达成了两项里程碑的成就: 其一,迎来第 10 个主版本;其二,全球活跃设备数量突破 25 亿台。

    Android 开发者
  • Android 学习资料收集

    收集整理这份资料主要帮助初学者学习 Android 开发, 希望能快速帮助到他们快速入门, 找到适合自己学习资料, 节省再去收集学习资料时间.

    咻咻ing

扫码关注云+社区

领取腾讯云代金券