郭霖,Android软件开发工程师。从事Android开发工作四年,有着丰富的项目实战经验,负责及参与开发过多款移动应用与游戏,对Android系统架构及应用层开发有着深入的理解。2013年3月开始,在CSDN上发表Android技术相关博文,很快就获得了大量网友的好评。短短一年时间博客访问量超过50万次,评价近3000条。荣获CSDN认证专家,并被评选为2013年CSDN年度博客之星。2014年,他创作了《第一行代码——Android》一书。郭霖现就职于蜗牛移动,继续从事Android开发工作。

问:你是如何成为一位Android开发者的?

也算是机缘巧合吧。之前我走的是Java Web方向,一次偶然的机会了解到了Android操作系统,我觉得移动领域刚刚起步,潜力很大,而且正好又是使用的Java语言,专业和我非常对口,于是我就踏上了这条路。

问:为什么要写《第一行代码——Android》这本书?它能为想要成为Android开发者的读者们解决什么问题?在看你的书之前,需要有什么样的技能和知识做基础?

我很喜欢看书,也看过很多的技术书,写书对于我来说算是一个纪念。至于为什么要写《第一行代码——Android》这本书,我认为基础还是非常重要的,这本书可以很好地帮助Android初学者入门,也可以帮助有经验的Android开发人员巩固基础。

写这本书的时候我是完全站在初学者的角度上来写的,因此只要有Java基础就可以看。对于Java的掌握程度那当然是越熟练越好了,但最低要求是至少要懂Java的基本语法。学习Java的书籍实在是太多了,我也没有都看过,说不上哪本好,大家还是自己找找看吧。

问:关于Android碎片化问题,你对开发者们有什么建议?

碎片化的问题确实让人非常头疼,这是由于Android系统开源的特性所必然导致出现的问题。在这种问题上我不敢说我对开发者们有什么建议,但我自己的做法就是不会为了少部分的用户群而去编写大量的兼容性代码。比如说现在Android 2.x的市场已经非常少了,但有很多的软件还是一定要去兼容这些老版本的系统。我认为这种行为其实在一定程度上纵容了碎片化的产生,也变相导致Android新版本系统普及过于缓慢。当然了,没有提供一种简便升级系统的办法是Android新系统无法迅速普及最主要的原因。碎片化问题即使谷歌都没有办法完全解决掉,我觉得作为一名普通的开发者就没有必要去深入研究了。

问:Android 的后台推送原理是什么?和iOS 相比有什么区别?

后台推送的原理都是相同的,就是让客户端和服务器保持一个长连接,当服务器想要推送的时候,就发送一条消息到指定客户端就可以了。虽说原理相同,但Android的推送要更加复杂一些,因为iOS系统中已经内置好了推送功能,只需要使用提供好的API就能简单地完成推送功能。而Android虽说也提供了类似的GCM服务,但由于在国内使用受到很多限制,所以推送还是要自己做的。不过目前国内也有一些第三方的推送平台,使用它们的话也可以很简单地完成推送功能。

问:对于想要从事移动开发的程序员来说,iOS, Android, WP各有什么优势?哪个未来前景更好?

从开发语言上来讲,Java和C#相对简单,上手成本比较低,这是Android和WP的优势。但iOS目前也推出了Swift语言,很大程度上缓解了OC上手困难的问题。从用户群体上来讲,Android和iOS基本上占据了绝大部分的用户群,WP的用户群体则相对较少。从软件的丰富程度来讲,Android和iOS都拥有绝对的优势,WP短期内并没有赶超的势头。因此,未来的前景我仍然认为Android和iOS会相对较好,WP的发展情况较难预测。

问:一直以来,Android的内部功能相比于iOS都更胜一筹,比如先进的应用内分享机制、自由定制的launcher 和widget,等等,但是iOS 7 特别是 iOS 8 带来的新特性在很大程度上赶上甚至反超 Android,你怎么看?

我从没认为Android系统要比iOS更胜一筹,虽说我自己是从事Android行业的,但我并不希望Android可以干掉iOS。这两个系统各有各的优势,共存是非常合理的现象。至于iOS 7和8推出的新特性我认为是很正常的现象,一个系统要是永远没有创新,那就只能是等死。这条理论同样适用与Android身上,所以Android也在一直进步,比如最近Android L系统的推出,在界面效果上甚至也有赶超iOS的趋势。谷歌和苹果都是伟大的公司,所以我不会片面的评价他们的系统到底谁比谁强。

问:你觉得Android L的最大亮点是什么?对于开发者来说,如何适应多屏开发的趋势?

Android L号称是Android历史上改变最大的一个版本,其中多数功能是系统内部的优化,比如ART运行环境、耗电性优化等。与应用层开发者相关的最主要的改变应该就是Material Design,新的UI,新的控件,给人耳目一新的感觉。

另外,之所以敢称Android L是Android历史上改变最大的一个版本,是因为从这个版本开始,Android系统就不再是仅仅应用于手机和平板上了,而是可以应用在手表、电视和汽车上。Android L中已经建立了Android Wear、Android TV和Android Auto这几个分支,也是为Android日后的多元化铺路吧。至于多屏开发的问题其实是外界人把它想复杂了,Android系统发展到了今天,已经提供了太多不同尺寸屏幕适配的解决方案,相信懂Android开发的朋友们都不会受这个问题困扰的。

问:你认为移动开发人员应该学习用户体验设计吗?如何入手?

所谓技多不压身,如果你有充足的时间和精力,多去学点东西肯定是有好处的。用户体验设计可以在很大程序上帮助开发人员编写出更优秀的程序,能掌握这个本领的话对自身的能力也是有很大提升的。

问:要成为Android开发高手要经过几个阶段?

这种问题我不敢回答,因为我自己也还不是一个高手。但是就我自身的成长经历来说,首先,一定要把Java的基本功打扎实,然后就可以学习Android相关的基础知识了(比如说看《第一行代码》)。接着,可以去尝试编写一些小软件,这样基本就能达到入门水准了。

自己能写出来代码只能算是第一步,接着你还要能读懂别人写的代码,这是很重要的一门功夫,也是要慢慢培养的。等你掌握了这门功夫后,后面的发展方向就非常宽广了,可以阅读你们公司大牛写出的代码,以及各种开源框架甚至是系统的源码,不断充实自己。

问:对于想深入学习底层架构的同学,应该怎样阅读 Android 系统源码呢?

我觉得阅读系统源码非常有必要遵循的一个原则就是抽丝剥茧、点到即止。应该认准一个功能点,然后去分析这个功能点是如何实现的。但只要去追寻主体的实现逻辑即可,千万不要试图去搞懂每一行代码都是什么意思,那样很容易会陷入到思维陷阱当中。因为这些庞大的系统都不是由一个人写出来的,每一行代码都想搞明白,就会感觉自己是在盲人摸象,永远也研究不透。如果只是去分析主体的实现逻辑,那么就有比较明确的目的性,这样阅读源码会更加轻松,也更加有成效。

问:读完《第一行代码》该如何开始下一步的晋级之路?

我觉得基础知识掌握之后,并没有统一的进阶方向,因为你已经拥有了开发很多功能的能力,后面应该根据公司的业务需求去深入研究相关领域的技术,这个就因人而异了。但只要基本功掌握的足够牢固,不管是什么方向的技术,你一定都能势如破竹地拿下的。


更多精彩,加入图灵访谈微信!