看源码的意义
看源码只是一种方法、手段,而不是目的。我也曾经给自己制定过“阅读xxx源码”的目标,现在看起来真的很蠢,一点不smart(specific、measurable、attainable、relevant、time-bound)。
只有搞清楚了阅读代码的目标,才能有的放矢,抓住重点,高效达成任务。
看源码的意义总结起来包含但不限于以下几点:
一、解决问题(BUG)
- 只要是代码,就会有bug,只是说bug的多与少、深与浅罢了
二、知其所以然
- 如果我们需要将一个开源项目用到自己的项目中,那么就必须了解这项项目的优缺点,并深知原理,对部分细节(尤其是项目的优势、feature)进行深入研究
三、学习
- 看源码也是一种不错的学习方式(虽然不一定不是最佳的方式),尤其对于比较优秀的开源项目,能让人大开眼界
四、改造
- 一般来说,我们刚开始仅仅是使用一个开源项目,但随着使用的深入,会发现一些自己需要的功能并没有很好的支持,向项目组提的issues也可能得不到快速的响应,这个时候就要自己开分支,改代码,加功能了。
五、借鉴
- 他山之石可以攻玉,如果有需要重新开始自己造轮子,那么参考一些已有的、优秀的轮子肯定是有好处的。
六、副产品
- 这一点,不应该作为我们阅读源码的出发点,但是确实能在实际中对找工作、面试有加成,算是副产品吧。
这里我有几点建议:
看源码前先问下自己:
- 你为什么去看源码,是为了面试?学习?或者和我一样为了封装一个自己的图片加载库?
如果是为了面试,建议先列出几种同类型的开源库,比如我们的图片加载库有Picasso,Fresco和Glide,首先你要知道他们的基本使用方式,能说出他们的优缺点,并从中挑选一个类库去深入了解,因为面试官很大可能会让你自己设计一套类似的开源库,那这个时候你有对某个类库做过深入了解,会起到事半功倍的效果,就算不能完整设计出来,也可以说出一些基本原理和大致的架构。
个人对看源码的思路:
先看整体框架:然后找到一个切入点,深入框架内部去学习。学习中间记得根据框架进行分阶段总结,这样才能不会深陷代码泥潭。接下来简单分享一份一个阿里大佬整理过的源码解析,就是这个《Android 开发相关源码精编解析》,文末直接领取
。
《Android 开发相关源码精编解析》组织结构
这份手册采用由浅入深的方式深入各大厂源码解析,分为 22 章,总计 558 页,整理目录如下:
1.深入解析微信 MMKV 源码
2.深入解析阿里巴巴路由框架 ARouter源码
3.深入解析 AsyncTask 源码(一款Android 内置的异步任务执行库)
4.深入解析 Volley 源码(一款 Google推出的网络请求框架)
5.深入解析 Retrofit 源码
6.深入解析 OkHttp 源码
7.深入解析 ButterKnife 源码
8.深入解析 Okio 源码(一套简洁高效的I/O 库)
9.深入解析 SharedPreferences 源码
10.深入解析 EventBus 源码
15.深入解析 Handler 源码
16.深入解析 Binder 源码
17.深入解析 JNI 源码
18.深入解析 Glide 源码
需要资料的Android工程师朋友们,点击下方卡片扫码即可免费领取,希望可以帮助大家在工作上和跳槽找工作起到一定的作用。