开发1年的学弟问我:有没有必要阅读Android源码?(1)

比如,了解View的绘制过程,了解TouchEvent的分发和拦截过程的细节,才能写出酷炫的UI,要不然,只知道大概的原理的话,你可能要在“无法接收到触摸事件”或者“滑动事件和点击事件冲突”的这些问题上折腾半天。

又比如,如果哪里出现异常,你能快速定位到源码抛异常类的地方,就能快速解决BUG,对症下药,一招撂倒,有些时候,修复BUG的时间不是用在解决问题上,而是用在定位问题上。

这里有必要提一下,当Logcat把异常的栈信息打印出来的时候,有些异常出现的原因并不真的是Logcat的信息里描述的原因,因为Logcat里的异常的信息也只是由系统源码打印出来的,而这些源码大多时候只是普通的Java代码,和你自己写的没什么区别,如果源码抛出异常的代码的逻辑不够严谨的话,那实际的异常和Logcat里描述的异常可能对不上。比如之前搞动态加载的时候,在使用LayoutInflator渲染一个外部的XML布局时,抛了一个“Class not found”的异常,我要渲染的类可是LinearLayout啊,怎么可能没有!定位到源码里才发现,这里只要是类渲染失败就会抛这个异常,再定位到具体抛异常的地方,发现实际是Dimens资源找不到,困扰半年的问题立刻解决。

其二,能够理解Android设计者的意图。

这个描述可能不好,比如说,许多人都觉得Android开发其实就是Java开发,通过阅读Context类的设计,你能够理解Google是如何在Java的基础上加上Android的特性的,你能够理解Context被叫做“环境”的原因。此外,阅读Activity/Service的源码,你能理解到四大组件类明明就是普通的JAVA类,为什么他们就是组件而别的类就不是组件。阅读Handler/Message/Looper的源码,你还能理解到Handler的精髓,数据驱动比事件驱动更适合用于设计需要经常改动的框架。阅读源码,你能知道Android是怎么管理Window以及向控制View的触摸事件的,你能知道基本上所有的res资源都有等价的Java代码的实现方式,你还能知道Dalvik是怎么无缝向ART过度的,在看通的那一瞬间,保证你觉得“水可载舟,亦可赛艇”!

其三,能够学习优秀开源项目的代码风格和设计理念。

这也是最重要的,看多了源码之后,你会发现所谓的源码也不过是普通的的Java代码,在不知不觉中受到这些优秀设计思想的影响。相信许多人在看 Volley 源码此前,对异步任务控制的想法基本就是毫无想法,看完之后简直是醍醐灌顶,原来代码也能写得这么有魅力,再看看自己之前写的异步任务,“new Thread().start”…,简直是“too young, sometime naive”有没有。

看了越来越多Android的源码,自己的写应用的时候,也就能写出更加“Best Performance”的代码,见识了越来越多的开源项目,自己也能够更容易找到最符合自己应用的框架和技术方案,学习了越来越多的优秀的代码风格,自己也就更能写出漂亮以及容易扩展的代码。

或许对许多做Android开发来说,平时的工作就是按照设计的图写个布局,再解析后台的数据,下班了把测试用的安卓机扔进抽屉拿出自己的苹果手机…… 但有时候花点时间看看源码,或许会觉得设计代码还是挺有意思的,特别是,当你花了两天的时间构思代码,再花两天的时间写代码,这时你可能觉得你还有许多代码要写,但是突然发现只要把你写好的接口衔接一下就都完成了,而且写了两天的代码居然一次编译通过!更甚,产品突然改了个需求,你在抱怨了一顿后发现只要花10分钟把原来的接口换个实现就搞定了,这或许是程序员工作中为数不多的乐趣吧。

《Android 开发相关源码精编解析》



本文在开源项目:【GItHub 】中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

如果需要PDF版本可以在群文件夹里,自行领取!

文末

面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不负责!

不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
击传送门](https://bbs.csdn.net/topics/618165277),即可获取!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值