小松的技术博客

六和敬

若今生迷局深陷,射影含沙。便许你来世袖手天下,一幕繁华。 你可愿转身落座,掌间朱砂,共我温酒煮茶。

2016年年终总结

这一年公司业务上一直在跟进QQ邮箱和微信读书两款产品的android重构;而在业余时间大多数都在学习前端,算是工作之余的一个调节吧。今年一直在构建和完善自己的知识技能树,感觉收获还是挺多的。

【android】

我的职位是UI开发,我负责的是android重构,一直都是与activity、fragment、view、adapter打交道,看似工作范围是挺狭小的,但是要做好,也是不容易的。而这一年的工作也让我足够熟练这一个领域了。我们的项目并不是mvp的,所以view层面会有很多逻辑代码,所以我们UI开发还是会写很多逻辑代码的,andrioid开发会帮我们负责封装后上层接口,然后我们完成页面逻辑。个人觉得这种分工是挺好的,一方面可以减轻开发的压力,另一方面我们可以和设计更好的沟通来梳理页面逻辑。但要做到这一点,我们也就必须要懂得更多了,必须学会Rxjava、EventBus、多线程这些业务逻辑所需要的知识点。但这不是一步到位的,所以这一年都是在逐渐的扩充自己的负责区域,期间少不了开发的鼎力帮助。也只有我们写的逻辑代码与开发写的逻辑代码质量不相上下时,开发才会放心的让我们去做。

作为一个合格的Android UI开发,个人认为需要建立下列知识技能树:

  • activity、fragment生命周期;
  • View的measure、layout、draw,这是写UI的第一个难关,特别是在自定义view时经常遇到。一定要通过大量练习来熟练掌握;
  • 事件分发机制;
  • 手势处理、拖拽、嵌套滚动等,嵌套滚动可以围观下我的文章玩转Android嵌套滚动
  • ListView、RecyclerView之类的重量级view;
  • 沉浸式状态栏。这是当前app经常要实现的一个特性,遇到的坑很多;
  • theme。可能一开始我并不会认为这个需要特别关注,但是当我们打造UI组件库时,发现theme其实是一个很好的东西。一个是view构造器的各个参数的解析与使用,另一个是用?attr的形式去获取theme的资源解决组件库的配置问题;
  • 动画;
  • Span。这个是用于TextView中,其可以实现非常多的特效,如图文混排、高亮等行为,当然如果了解其原理,我们可以做更多的事情。个人也写了一篇文章,有兴趣的可以围观下

就我这一年的经验,我们需要在日常开发中不断的熟悉这些知识点,并且我们需要深入研究其源码实现。android的坑点是很多的,很多时候是被迫去阅读源码的,如果我们了解了其内部实现,可能很多点就不再是坑点了。而不像ios,很多行为我们知道是这样,但永远无法知道为什么是这样。最近在完善UI组件库时,都会去仔细阅读系统相关的组件。这不仅为我提供了大量的实现思路与代码,还无意间让我了解到一些api的用法。android源码无疑是一个巨大的宝库。

当然,懂得了上述知识,我们也只是停留在了UI重构的地位,作为一个有理想的程序员,怎么能只满足眼前的安逸,我们需要了解android开发所做的事情,以及了解android圈的技术走向。

2016年,rxjava的热度持续上涨,并且迎来了rxjava2。不过其接口与rxjava1相差特别大,我想已经成熟的产品短时间基本上都不会去升级。rxjava本身的复杂度是非常高的,去年很多文章估计都是入门型的,今年就有了很多将操作符、讲原理的文章了。我非常推崇Piasy翻译的Advanced Rxjava系列,其每一篇文章都很难,但是多读几遍后会有一种豁然开朗的感觉。

在android圈,其流弊的项目结构基本上已经稳定了:rxjava + retrofit + okhttp + butterknife + dagger2 + mvp + picasso/glide。微信读书项目使用了rxjava + retrofit + okhttp + butterknife。当然还有数据库了,一般用sqlite,不过realm也开始在android上崭露头角了。这些主流的技术也就是我们需要去学习和掌握的了。当然这也不是那么容易。今年我也只是为学习这些技术做了一些铺垫, 学习了其中的一些基础技术例如:

  • handler与它的小伙伴
  • 动态代理(retrofit的基础技术)
  • 注解与代码生成(这在butterknife与dagger2是很核心的技术,我们的项目也有很多地方用到,个人也写了一篇文章,Java注解与代码生成
  • 反射
  • 并发
  • 网络与io
  • 大端模式与小端模式

在学习这些框架的过程中,经常会遇到这样或者那样的问题,最终还是要去落实到弥补基础知识。上述的这些基础知识,我感觉个人对网络与io还有很多基础知识需要去补,不过我想在学习框架时也会暴露出更多的问题吧。这个时候读项目源码就有很大助力了,WeRead项目在这些技术和框架的使用上还是有挺多沉淀的。

今年读的android相关的书是《android源码设计模式解析与实战》。挺好的,学源码的时候学设计思想,结合《android开发艺术探索》一起看,效果更佳。我想我的2017年也应该是重读这两本书,去弥补那些曾经迷惑的知识点。

【前端】

今年前端圈绝对是最为热闹的,没有之一。今年jquery迎来了第三个版本,也不再支持IE8;avalon 2、Vue 2相继携virtual dom、ssr问世;React版本号继续飙升;Angular4 beta版已经问世;weex也迎头赶上;国内阿当老师数次引发前端口水大战。。。

前端圈现在很活跃,但很浮躁。不过浮躁的是外界,我们还是静心下来好好学习吧。今年在感觉最大的成就就是好好的读了Vue的源码,学习了MVVM、virtual dom相关的技术,并有三篇产出:

Vue源码浅析(一)

Vue源码浅析(二)-生命周期

Vue源码浅析(三)-render函数

原本计划上半年读完Vue源码的,可是最终是失败的,在细读完响应式原理后就感觉读起来很费劲,因此回去继续恶补基础。又拿起司徒正美的《javascript框架设计》。这次读了还是有非常多收获的,之前很多感觉很模糊的地方都清晰了很多。这个过程也是读了很多mass和jquery的源码。微信读书上有这本书的电子版,先来无事做就当小说一样读读源码以及作者的解析,堪称完美。 到了后半年,感觉自己有那个能力hold住Vue了并且已经因为屡屡失败而弃坑王者荣耀,就重拾Vue源码阅读计划,因为Vue2已经发布,我就直接去读Vue2了。

个人在前端的学习上主要是碎片化时间的利用。其实每天是有足够的时间供我们去学习这些技术的,如果把每天玩王者荣耀的时间利用起来,那还是能够累积很多的学习时间和源码阅读时间的。可视王者荣耀的魅力也挺大的,哎,最近又管不住自己的手了(但是也得尽量多人一起玩,那样气氛很容易就搞起来了。。。)

【展望2017】

2017年我会继续深入android了,应该要有能独立开发一款app的能力。其主要聚焦于下面几个方面:

  • QMUI Android完善。 QMUI Web与QMUI iOS相继开源,而Android还在开发当中,2017年要发力了。
  • http。了解retrofit、okhttp的原理并且熟练运用
  • sqlite。

前端方面的话,我会在业余时间继续探索下Vue ssr以及组件化的相关知识。

阅读计划:

  • 《android源码设计模式解析与实战》
  • 《android开发艺术探索》
  • 《javascript ninja》

其它:

持续写作。今年好像还没达到一个月一篇的产出。

←支付宝← →微信 →
comments powered by Disqus