到底有没有必要阅读源码?有必要,而且非常有必要!原因有三。
其一,了解基层,高层才能更好地工作。
比如,了解Viw的绘制过程,了解TouchEvnt的分发和拦截过程的细节,才能写出酷炫的UI,要不然,只知道大概的原理的话,你可能要在“无法接收到触摸事件”或者“滑动事件和点击事件冲突”的这些问题上折腾半天。
又比如,如果哪里出现异常,你能快速定位到源码抛异常类的地方,就能快速解决BUG,对症下药,一招撂倒,有些时候,修复BUG的时间不是用在解决问题上,而是用在定位问题上。
这里有必要提一下,当Logcat把异常的栈信息打印出来的时候,有些异常出现的原因并不真的是Logcat的信息里描述的原因,因为Logcat里的异常的信息也只是由系统源码打印出来的,而这些源码大多时候只是普通的Java代码,和你自己写的没什么区别,如果源码抛出异常的代码的逻辑不够严谨的话,那实际的异常和Logcat里描述的异常可能对不上。比如之前搞动态加载的时候,在使用LayoutInflator渲染一个外部的XML布局时,抛了一个“Classnotfound”的异常,我要渲染的类可是LinarLayout啊,怎么可能没有!定位到源码里才发现,这里只要是类渲染失败就会抛这个异常,再定位到具体抛异常的地方,发现实际是Dimns资源找不到,困扰半年的问题立刻解决。
其二,能够理解Android设计者的意图。
这个描述可能不好,比如说,许多人都觉得Android开发其实就是Java开发,通过阅读Contxt类的设计,你能够理解Googl是如何在Java的基础上加上Android的特性的,你能够理解Contxt被叫做“环境”的原因。此外,阅读Activity/Srvic的源码,你能理解到四大组件类明明就是普通的JAVA类,为什么他们就是组件而别的类就不是组件。阅读Handlr/Mssag/Loopr的源码,你还能理解到Handlr的精髓,数据驱动比事件驱动更适合用于设计需要经常改动的框架。
阅读源码,你能知道Android是怎么管理Window以及向控制Viw的触摸事件的,你能知道基本上所有的rs资源都有等价的Java代码的实现方式,你还能知道Dalvik是怎么无缝向ART过度的,在看通的那一瞬间,保证你觉得“水可载舟,亦可赛艇”!
其三,能够学习优秀开源项目的代码风格和设计理念
这也是最重要的,看多了源码之后,你会发现所谓的源码也不过是普通的的Java代码,在不知不觉中受到这些优秀设计思想的影响。相信许多人在看Volly源码此前,对异步任务控制的想法基本就是毫无想法,看完之后简直是醍醐灌顶,原来代码也能写得这么有魅力,再看看自己之前写的异步任务,“nwThrad().start”…,简直是“tooyoung,somtimnaiv”有没有。
看了越来越多Android的源码,自己的写应用的时候,也就能写出更加“BstPrformanc”的代码,见识了越来越多的开源项目,自己也能够更容易找到最符合自己应用的框架和技术方案,学习了越来越多的优秀的代码风格,自己也就更能写出漂亮以及容易扩展的代码。
或许对许多做Android开发来说,平时的工作就是按照设计的图写个布局,再解析后台的数据,下班了把测试用的安卓机扔进抽屉拿出自己的苹果手机……但有时候花点时间看看源码,或许会觉得设计代码还是挺有意思的,特别是,当你花了两天的时间构思代码,再花两天的时间写代码,这时你可能觉得你还有许多代码要写,但是突然发现只要把你写好的接口衔接一下就都完成了,而且写了两天的代码居然一次编译通过!更甚,产品突然改了个需求,你在抱怨了一顿后发现只要花10分钟把原来的接口换个实现就搞定了,这或许是程序员工作中为数不多的乐趣吧。
作者:Kad来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
积累、传播
分享、正能量
程序员的自我修养专业治疗皮肤白癜风北京好白癜风专科医院