1、踏上Android学习之路
在大三的上学期我是有自学过c#的,现在想来估计是连门都没入。我是一个辣鸡二本学校的学生,周围有在我看来还算牛x的人,当然大部分光从技术的角度来说,都不咋滴。刚开始学c#,写了一个简单的俄罗斯方块之后就不知道该干啥了,又在假期里跟着网上找的培训视频写了个什么家庭理财,就是本地连个sqlserver数据库做一些增删查改,然后拖拖控件。然后之后就不知道该干啥了……是的,我不知道之后我该去干啥了……在大三下学期学校有一门和Android开发有关的课,其实我身边也有几个学习Android的同学,于是便想借这个机会了解下Android,也是由此,我踏上了Android开发的学习之路。不过学校的这门课还是比较水的……我买了第一行代码看,老师看到了还说这本书讲的稍微深了一点……
刚开始的时候是从Java开始看的,同学推荐我看毕向东的Java教学视频,我跟着看了大概半个多月,耐不住寂寞开始弄起了Android。当然了,在淘宝上花了30多块买了黑马培训视频看的。想起当时跟着视频一行一行敲代码……虽然进度非常慢,但是对于没接触过的人来说,视频还是用来入门的不二之选。还记得当时看视频有一个觉得非常难,就是简单的新闻那个。当时对于我来说陌生的东西非常多,Json,ListView,HttpUrlConnection,Adapter……其实有的时候** 现阶段感觉很难的东西,可能只是以后继续学习的基础 **。
之后有一天看到同学桌上有本《Android开发艺术探索》,翻了下目录,觉得这书好厉害,讲了很多原理一类的东西,于是入了一本,从此踏入Android不归路。在看了一段时间的视频之后,嫌看视频太慢,之后自己开始尝试自己写一个能展示新闻的简单demo。在完善了基本功能之后,尝试将自己平时所看到的缓存之类的加入到其中,于是有了News。当然了News中的一部分参考了SimpleNews,News仓库时间并不对,因为包名大小写的问题我曾经删过一次原仓库。
2、一份实习
学校7月份实训,也就是把我们丢到了一个地方在一个月内接触js、mysql、spring、html之类的东西。最后感觉没学到什么东西,因为时间的确有点短。在这一个月之内我尝试投过几家的实习,不过除了培训其他的公司都没有反馈,最后一家刚起步只有两个IOS的初创公司看了我的简历并给我打了电话,当时感觉真是抓到了救命稻草。我去了之后,就是两个IOS加上我一个Android,是的没有搞后台的,第一个项目是老板之前外包做的一个项目。两年之前的代码,一个两年没有维护过的代码,没有任何文档说明,因为不是一个人写的,代码还有不同的字符编码,总有一些注释是乱码。当然了,我觉得最最最最最关键的还是:
- 我菜
- 没搞服务器代码的大兄弟
那个项目用的是httpclient,以前的项目感觉很多用的都是这个,而且我也看到过用async-http的项目。该咋说呢,在我看书学Android的时候,httpclient就已经从源码里删除了,所以我一直没怎么关注过。而且当时是很菜的,光看api都能把我看的慌的不行了。
当然了,列举了这么多困难,还有一些没列举的,主要还是因为:
- 我菜
其实当时老板也没给我分配很多的任务,就让我找接口然后写个文档给IOS的同事用,是的没看服务器代码的大兄弟,只能让我去搞了。我在客户端里找各种接口,我发现他所有的请求代码都写在Application里,通过Handler将各种请求结果传回到原来的Activity、Fragment中,感觉还是挺神奇的。虽然了解过一点Android消息机制,但是并没有像这样实践过。不过将请求写在Application里这种做法我并不认同,各位也不要效仿,
在这期间,我认识到我自己有很多的不足,一点问题都能让我折腾很久,可能一个新司机和一个不那么厉害的老司机之间的区别就是效率吧。所以我每天有空都会刷《Android开发艺术探索》,到后面有些东西看不懂了,我买了《Android群英传》不过感觉群英传相比于开发艺术探索,可能你看群英传刚觉得有点意思的时候,就戛然而止了。《开发艺术探索》则不是,你会看到怀疑人生(夸张的说法)。
3、自己从零搭建的第一个项目
是的,没错,我的第一份实习工作,公司的项目是我从零开始搭建起来的。为什么公司的项目能让我搭建呢?很简单,刚开始做这个项目的时候,Android这边只有我这一个人。那么我选用了哪些第三方来构建这个项目呢?
- okhttp-utils
这个是鸿洋大神写的okhttputils,原生OkhttpClient用起来还是比较麻烦的,而鸿洋大神写的这个从调用方式上来看还是非常简洁易用的。当然在用的过程中也碰到过一些坑:
表单请求在okhttputils内部是采用Map封装的,有的需要你传数组的时候,键就是重复的,只能添加一个参数进去,这点算是比较坑的,不过有办法解决,答案我写在了OkhttpUtils的一个issue里了:参数重名怎么办
还有一些小坑我印象不是很深了,略过~
- RxJava && RxAndroid && Lambda
我这个。。强行用了一波,不过现在还是感觉链式调用很爽。。。而且配合lambda写的代码看着也比较简洁。可能RxJava结合Retrofit更加简洁,但是我当时要看的东西的确挺多的,真的没空再去了解Retrofit了,而且对于当时我的来说再去学习Retrofit,成本比较高,权衡之下就选择了okhttp-utils。
- MVP
在使用MVP的过程中思考了一下内存泄漏的问题,最后也得出了一个简单的解决方案,思考过程写在了这篇文中:Android内存泄漏浅析,其实说是思考过程,就是各种查资料,然后结合以前大学里学到的一些东西结合理解一下。不过我现在感觉我用的MVP可能只是最基本的使用方式,写的类接口很多,虽然最终考虑抽取了BaseModel、BaseView和BaseActivity稍微简化了一些,但是整个实现的过程中还是感觉有点累,写的东西真多。不过说架构清晰,这点倒是可以承认,毕竟Model和View分离,互不感知。看google的mvp项目之后我一直有点怀疑我写的是不是mvp。。这个留待我以后在思考。
- 百分比布局
没啥好说的,不过后来才知道鸿洋大神有个AutoLayout更好使。。
- 黄油刀
并不是用反射实现,不用担心性能问题,关键是有插件可以一键生成。。。不过关于是不是要用这个好像还是有些争议的,各位可以自己权衡。
还有一些东西印象并不是很深,如果我觉得有补充的必要我会加上来的。
上面那些东西我也并不是一下子就都会用的,都是慢慢学习,自己在网上一点一点的找资料啃下来的。中间的困难现在都已不记得了,在从零搭建好了那个项目的框架之后,闲暇之余我开始复习Java,毕竟之前看视频看的Java有些基础不是很牢靠。于是我开始阅读《Java编程思想》,并开了个Java回炉系列来记录自己回炉Java的过程,不过现在我觉得我的一些理解可能是片面的,不正确的,但是这并不影响我继续学习不是么。暂时的片面和不正确并不可怕,不断的深入学习就可以了,我是这么想的。期间,我尝试过自定义View不过说实话,这个东西只能作为一个学习的资料,也和小伙伴们讨论过http协议,感觉到成长之路也是自己一步一步踏出来的。过去的一年都回顾的差不多了,再用几个词简单的概括下:
- 有进步
- 入了门
- 很懵逼
展望2017
2017,大学的最后一个学期,也是将要正式踏入社会的一年了,希望自己在最后的一个学期里好好磨练自己,也能找到一份满意的工作。虽然环境不如以前了,但是还是得努力加油~
不努力一下,都不知道什么是绝望。
条条大路通罗马,有的人就生在罗马。
最后的毒鸡汤是不是猝不及防,哈哈哈哈~
最后呢,自己还有非常多的不足,仍需努力提升自己~