2016 年技术总结

记得去年写年终总结的时候,我还在去看老友的火车上,那时对新一年充满了无数期许,虽已是争分夺秒,但是当宣布 game over 的那一刻,这一年的收获、成长、遗憾、失落已经定格。

内容提要

  • MVP 架构 App
  • 浮窗组件开源
  • NodeJs 全栈开发
  • App web 化发展趋势
  • 年度博客总结

MVP 架构 App

针对项目中结构混乱,分层不清晰,提出 MVP 架构的想法,经过内部分享,试点实践,最终于五六月份在 MVP 的基础加上 EventBus 全面重构。 架构的收益是持续的,去掉了耦合在各个层面上回调函数,从架构层面上规避了最常见的内存泄漏问题,同时由于层之间的高度解耦,使得我们可以针对不同层次使用不同的单元测试框架,大大降低了写单元测试的成本。

尽管 MVP 和 EventBus不算什么新技术,但对我们的项目来说是第一次,作为一个团队的一员,要引入新的技术或新的想法不是一件容易的事。你得说服你的老大还有你的同事,你不能干巴巴的说这个技术好然后你的同事就能信服你,特别是技术水平和视野上的差异,没有认知上的共鸣,你很难推动实施。作为团队的新面孔,我也是费了很多波折,开始在小组内做 MVP 的分享,再后来是在新接手的业务带头实践 MVP ,真正让大家全面认可是下面的经历:

大约是4、5月的时候,随着功能的增加,各处隐藏的内存泄漏问题终于累积到了一个爆发点,大量引发 OOM 问题。经过内存工具排查、反复测试、观察内存走向,游走大部分历史代码终于解决了问题。我把解决过程详细的写成了两篇内部分享文章,鞭尸了 n 多个黑代码(很多人为了怕影响同事关系,宁愿容忍渣代码,也不愿指出错误,我很不赞同这种价值观,对于技术氛围的形成十分有害,渣代码就是要鞭尸,我觉得应该提倡 review ,彼此鞭尸渣代码。),内存溢出并不是在某个功能点,而是散布在各个地方的 Handler ,这些 Handler 让各个层次藕断丝连。为了规避这些问题,才有了后来的 MVP + EventBus,它才开始真正被接纳。

关于在团队中引入新技术,除了沟通能力之外,你应该还要做到两点:1 明白项目的问题在哪里,2 用你要引入的技术解决当下的问题,3 对于新的技术,团队成员成本多大,例如当时想本要使用 RxJava ,考虑到当时团队成员的学习成本就使用较为容易上手的 EventBus 了。

浮窗组件开源

为了方便玩家游戏过程不用切换游戏也能方便地体验我们的 App 的服务,我们需要"伸出一双手"到游戏中,在合适的位置、合适的时间出现。等于将 App 的功能阉割到浮窗中,所以逻辑还是比较复杂,经过几个版本下来遇到了很多坑,特别是在版本兼容问题上,在解决这些问题之后我觉得应该把浮窗组件沉淀一下,开源出来:https://github.com/liuguangli/FloatUtil

插件化研究

在进行浮窗功能设计的时候,一开始打算做成插件的形式,花了大量的时间进行插件化的研究,看了几大开源框架,对于设计模式、Android 框架、App 加载和执行等都是一次进阶性的提升,最后形成了插件化研究的系列文章:

NodeJs 全栈开发

App 客户端的需求越来越少,刚好后端要做业务重构,进行前后端分离,主动申请参与前端的开发,从无到有参与前端 NodeJs 项目架构并支撑第一个新业务的上线。前后端分离,在组织架构上也算是一种解耦, 为了让后端从"代码套页面"的噩梦中解放出来、更加专注于数据业务的开发,后端面向细粒度 API 开发,只关注服务和接口;NodeJs 作为服务到用户的中间层,面向用户侧的开发,关注交互和界面,提供多端特性的适配。

App web 化发展趋势

3 月份大家还在大谈插件化、这个时候插件化已是百花齐放,React Native (简称 RN)已经在各大技术沙龙分享实战经验,2015 年 9 月 RN 发布开源,这是一次 App 跨平台开发思路上的突破:Web 方式编程,原生化的体验。

2016 年 6 月,阿里开源 Weex ; 2016 年 9 月,微信小程序开放内测;RN、Weex 和小程序 在思路上是一致的:采用某一种 Web 编程技术编写页面,生成的 js 部署到服务器,然后下发到客户端,客户端 App 上搭载一个 JS 解释器,最终转换成 Native 组件。 三者实现手段上略有差异,RN 采用 React 的语法编写程序逻辑,客户端采用 JavascriptCore 作为 js 解释器;Weex 采用 Vue 语法编程,客户端使用 V8 内核作为 Js 运行环境;微信小程序可能和前两种差稍有不同,稍微进化得慢一些,小程序提供的编程方式和 Weex 很相似,不过最终下发到客户端执行的还是 html 和 js 文件,最后由 X5 内核来执行 html 和 js。

RN、Weex 和微信小程序让我看到的是一种编程方式的变化,App 原生开发和 Web 开发正在统一。微信小程序的出现一度引起很多讨论,其中就有关于小程序是否会吞并 App 的讨论,我倒是对此不以为然,不过我思考的是:微信小程序能做到、Weex 能做到、RN 能做到,那么 OS 来做不也是轻而易举的事么?这样的 OS 一定会到来吧?(这时,我不由得把视角转向了 Google ,据说 Google 内部正在融合Chrome OS 和 Android,将推出 Andromeda 操作系统。)那个时候才是真正的大一统。技术发展一直遵循着摩尔定律,性能、带宽逐年提升,Web 和 原生的体验差距在慢慢变小App web 化开发一定是一种趋势。

年度博客总结

1 插件化系列文章,总结了插件化开发的基本思想概论。

2 浮窗系列文章,总结了Android 窗口体系的相关知识点。

3 物联网入门系列文章,总结了 NodeJs 在硬件领域的使用,使用 Ruff 来 DIY 自己的家电。

4 经验、思维、方法论

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,050评论 25 707
  • 原创 2016-12-27 徐川 移动开发前线 目录 前言 平台篇 iOS平台 Android平台 iOS开发技术...
    iOS菜鸟攻城狮阅读 501评论 0 4
  • 尽管很多妈妈都知道新生儿由于生理原因才容易导致吐奶,但一看到自家宝宝吐奶时,还是紧张得不知所措。下面将会为你详细介...
    第6通道阅读 2,828评论 0 0
  • 我姓穆 我心怒/我心慕 我姓穆却只能在人群中默默仰慕你 大概是因为你喜欢黎明而我姓穆
    麦子小穆阅读 128评论 0 0
  • 我是从什么时候开始迷恋上旅行的?具体不是特别清楚,不过这种念头的萌生,一定是在年龄的支撑之上,既大到可以会被“旅...
    Char_阅读 258评论 0 0