在今年11月底也是算学完了郭霖前辈的《第一行代码》,之后根据导师的引导,我开始着手自己的第一个项目。在12月底算是实现了初始计划。
我的工作是 重写该项目android端代码,并且与服务器做好交互。导师在思路上会给一些指导,但是技术上除了学长以前写的半成品的代码之外,并无参考。
由于项目并没有开源,所以我在此也无法附上源码了。不过主要的一些android端功能的实现,我已经写成文章分散在了我CSDN的博客里了,有兴趣的读者欢迎评论交流。主要涉及的功能有:viewpager、录音笔(file、baseAdapter)、记事本(SQLite、bundle)、短信加密(broadcast、contentprovider)、socket通信等等。
当然这期间我也是没有停止写博客,于2016年1月6日,我博客访问量已经突破了一万,自己的原创文章也已经写了59篇(加上这篇正好60篇),以下是截图:
项目学习
刚刚学完《第一行代码》的时候说实话是比较亢奋的。不说感觉自己已经成为了大牛,但是至少认为自己已经可以正式称为一个android开发者了。(QQ开发群里的老前辈也说:“你这样已经算是老油条了。”)
和导师详谈了之后,导师的要求就是要我能够把书的目录能够大致复述出来,最好能够说出目录下的小标题,并且有自己的理解。目的是让我对android整个基本应用层能有一个系统的了解。随后我说准备好了,导师并未测试,便直接让我开始了第一个项目。
“做项目”对一个刚刚系统学完android基本应用层的人还说还是比较大的,自己的主要收获有如下:
1、能够将零散的知识点串起来,学习灵活运用。
就拿“记事本”打个比方,涉及到的android知识点有SQLite,bundle、AlertDialog、listview、activity的生命周期等等。这些,对刚刚学完一本书的人来讲相信都比较熟悉,但是要把他们连起来做一个比较个性化的功能,这便不是分分钟可以解决的事情了。而“做项目”算是对学的知识点的一个复习,也算是对灵活运用能力的一个锻炼。
2、查漏补缺,学会自学,跟上时代步伐
我买的《第一行代码》出版时间是2014年8月,基于的版本是android 4.0(现在android 6.0都已经出了),已经算是市面上比较新的书籍了。但是还是跟不上android更新的速度。
首先是IDE,《第一行代码》是eclipse,而谷歌在2015年年底就已经停止了对eclipse的技术支持,现在要搞android基本都需要用android studio,并且android studio现在已经更新到了2.0的版本,已经比较稳定,速度也是越来越快。更别说是要使用git了,github上基本全是android studio项目类型的代码。
其次是知识点,就拿图片的uri举个例子。
在android4.3或以下,选了图片之后,根据Uri来做处理,但是在android4.4之后,如果使用pick的原生方法来选图,返回的uri还是正常的,但如果用ACTION_GET_CONTENT的方法,返回的uri跟4.3是完全不一样的,4.3返回的是带文件路径的,而4.4返回的却是content://com.android.providers.media.documents/document/image:3951这样的,没有路径,只有图片编号的uri。
(相关博客: android从相册中获取图片出错,图片无法裁剪的问题)
这样就会导致如果在选了图片之后要进行裁剪的操作,根据4.3以前的方式来码代码,程序是会崩溃的。
另外还有geogle新出的RecyclerView(listview的优化版)、DrawerLayout(geogle官方发布的抽屉效果)、toolbar(取代actionbar)等等。
以上这些在《第一行代码》中都是没有讲到的。不是说郭霖前辈写的不好,而是这些都是由于时代更新无法避免的问题,所以作为一个IT programer也必须做好不断学习的准备。
而到这时,我也是觉得自己学完一本书仅仅是学完了一本书。之后还有太长的路要走了。
3、走向实战,明确方向。
做项目的另一个好处便是把我们拉向现实,有意识地去学更多用得到的知识。android的知识太多太多了,对于一个初学者来讲,就算他励志把android全部学会,恐怕他的学习进度也未必跟得上geogle更新android的速度。即使到他真正觉得自己好像都学会时,恐怕也未必做得出优秀的作品。而作为一个开发者,我们给自己的首要任务与目标,当是做出优秀的作品,而不是呆板的掌握所有的知识。
说到做一个优秀的作品,这就牵扯了太多的东西了。当今哪怕仅仅是一个大学生参赛APP,要考虑的也绝对不仅仅是码代码而已,还牵扯了太多,我还是拿自己所做的项目举例了:
1、队友之间的交流。
我做的项目的内容涉及了服务器与硬件和android客户端的交互,那么相互间消息的传递就必然基于相互间足够的交流了。包括之后的写文档,写到一个牵扯比较广的功能,也必须大家一起交流才能写得出来。
2、android开发者也要会PS
一个APP是给用户用的,如果是很丑的界面,那么在看到这个APP的第一眼就可以判定他的死亡了。而一个APP做的能有多好看,也不仅仅是一个team中美工的工作,也是android开发者的工作。
作为一个普通的美工,他们知道的只是怎么去做一个好看的图,或者设计一个好看的布局,但是他们并不知道在哪里位置可以多放一个控件来增加美感,或者给整体布局增加一个好看的标题栏。他们思考不到这些,因为他们并不知道这些在android客户端是否可以实现。
当然,倘若一个android开发者完全不懂PS,只要一遇到图片之类的问题就直接扔给美工,那么他们之间的交流成本以及该团队的美工的工作量是极大的。且不说这样一个APP要做多久才能做出来,倘若之后android开发者要重写整个布局,那么团队中美工的所有工作不都泡汤了吗?
读书与交流
1、读书
在做项目期间,我学习了《疯狂android讲义》、《android群英传》、《android开发艺术探索》,后面两本是前辈们比较推荐的android进阶书。
《疯狂android讲义》:比《第一行代码》讲的更详细的入门书,但是其中的很多知识点并没有《第一行代码》中那么通俗易懂,笔者的建议是推荐新手在学完了《第一行代码》之后学习。两本书很多知识点是有重复的,但是在《疯狂android讲义》还是讲了socket、drawable等很多在《第一行代码》中没有讲到的内容。
《android群英传》:属于进阶书。其中对我们常用一些知识点有一个深入的剖析,比如会告诉你如何自己写一个view、滑动效果是如何产生于实现的、自己如何绘图等等。书中也是将了android 5.0的一些新特性。笔者目前正在学习此书。
《android开发艺术探索》:网上最受好评的进阶书。但是由于我的项目经验不够,目前啃起来还是比较有难度。在此就不过多评论了。
2、交流
近期我也是加了很多QQandroid技术群,主要是交流。
一方面,自己有一些实在无法解决的问题可以问前辈,很多时候只是思路上差一点,提点一下马上就懂了。
另一方面,自己可以为新人解决一些问题,可以查看自己对知识的掌握情况。很多时候直接是把自己的以前写的博客发过去,也是可以查看自己以前博客是否讲述有疏漏,对自己也是起一个激励作用。