1.题外话

赶着双十一京东的优惠活动,买了《App研发录》这本书,看了下目录很感兴趣,就花了一周的时间看完了,这算是来写篇读后感吧,这本书整体和其他类开发的书还是有许多不同的地方,它没有系统的介绍Android的知识点,更多的是作者站在一个项目经理的角度对自己的经历所做的一个总结,所以对于项目的Team Leader来讲,这是一本很不错的书,或许你从中可以找到共鸣的地方。附上作者博客

image

2.书中内容

拿到书翻开的第一页就能看到360董事长周鸿祎做的序,当然了周董对书寄予很多,另外就是美团技术学院院长和大众点评首席架构师的作序(话说这两家公司现在合并了)。

重构

这个对于新手来说还是不错的内容,作者的思路很清晰,站在整个项目全局来看,从整体项目结构到内部统一规范实现。

网络框架封装

这个在现在看来虽然从技术上有些显得过时,尤其是Android6.0出来之后,谷歌把HttpClient从SDK包中移除了,所以这里我个人还是建议考虑当下流行的一些开源库来做,比如Volley、Retrofit、OKHttp、RxJava等,可以在此基础上做封装来适合我们的需求。但这里面还是有一些很不错的思想值得我们借鉴,尤其是提到的网络优化工作:onFail的统一处理,进度条的处理等。此外,作者提到了网络请求的缓存设计,具体思想就是:

  1. 尽可能的减少API的调用次数;如页面需要调用多次才能拿到全部数据的可以设计成一个。
  2. 缓存请求到的数据;对于即时性很低的接口可以通过配置缓存时间来形成不同的缓存策略,作者也提到这种适合GET请求,不适合POST,一个是请求数据,一个是修改数据。
  3. 根据缓存时间是否过期来判断数据是否有用,最后就是加入强制更新策略。

这一章还提到一个就是模拟数据,因为在App开发过程中,后端往往没有数据可供我们测试,这时候我们只能自己造数据,作者呢也实现了一个MockService,来帮助我们产生假数据,其实这个GitHub上面也有不错的开源库,关键词搜索Mock,就会出来很多。
最后也提到了会话的保持,换句话说会话过期如何处理,以及时间校准问题和开启gzip压缩。

Android中经典的场景设计

如图片缓存设计,像这些都有不错的实现库,像Volley、UIL、picasso、Fresco、Glide等等,另外一个是对网络流量的优化,作者提到了几点:

  1. MobileAPI接口返回的数据使用gzip进行压缩。
  2. 传统App和MobileAPI即后端交互数据传递一般是走JSON,这里作者提到了谷歌发起的ProtoBuffer协议,这个协议是二进制格式的,所以在表示大数据时,空间比JSON更小。
  3. 解决频繁调用API的问题。
  4. 改变接口的连接方式;传统的都是HTTP无状态短连接,速度远不如TCP协议,因为后者是长连接,提高了速度,不过也加重服务器的负担。
  5. 建立取消网络请求的机制,如果一个页面销毁了,那么就可以让这个页面的所有请求都取消掉,因为这些是没有意义的,完全可以不再等待,也不再接受数据。
  6. 增加重试机制,针对POST增加仿重机制。

针对图片的策略优化,尽可能的保证图片下载的宽高符合控件的大小,另外就是低流量模式的引入,比如可以适当降低图片的质量或者说大小,另外也可以针对2G或3G用户提供极速模式,不加载图片,只显示文字,这点最好做成配置项设计到App设置里面。另外一点就是提到App与HTML5的交互问题,为后面更新做技术铺垫。

####命名规范以及编码规范
从文件命名,变量命名到编码规范,代码风格统一等,这样就可以保证团队的统一性。

Crash异常的收集与统计

我们都知道一个重要类就是UncaughtExceptionHandler类,通过实现它来做三件事情:发错误日志到服务器,给用户崩溃前的友好提示,错误日志记录SD卡。另外就是还可以使用第三方的一些服务,有很多就不在多说。我想最精彩的或许对有些人来说也最无聊的就是crash的异常分析,作者整理了他几年当中遇到的频率很高的一些异常,然后分别从语法相关、Activity相关、序列化相关、列表相关、窗体相关、资源相关、系统碎片化相关、Sqlite相关、一起其他异常等几个方面来归类和分析原因,我觉得这个也是写这本书最花时间的地方,也是我看的最过瘾的地方。

ProGuard混淆及打包与渠道发布

这个无须多说,本书介绍的还是基于ant的打包方法,这里我个人还是建议开发者都切换到Android Studio上面来,尽可能的熟悉新的构建工具Gradle,以及如何使用它来打包和进行渠道发布。

竞品分析

这个词还是来自产品这个领域,据说作者分析了市场上几百款App来写这一章,并且以技术的角度研究了以下几个方面:

  1. 为什么他们的App体积比我们小
  2. 为什么他们的App访问速度比我们快
  3. 为什么他们的App不发版本也能上新功能
  4. 为什么他们的App基本就不怎么崩溃
  5. 为什么同样的产品,我们的价格更有优势,却竞争不过对手

从HTML5页面打开速度、安装包大小、性能优化、数据采集工具、热修补、模块化拆分、版本策略等几个方面展开分析。

项目管理和团队建设

作者是站在一个项目管理者的角度来谈项目开发,详细的介绍了测试团队、产品经理的职责、开发人员和项目经理的角色,以及敏捷开发的流程,大致有4类开发迭代周期:

  1. 四周时间的开发流程
  2. 两周时间的开发流程
  3. 一周时间的开发流程
  4. 即时更新策略

以及强调了项目经理的几个重要的工具:

  1. 任务评估表
  2. 迭代阶段贴小纸条来标识项目进度,形成一个时间轴
  3. 会议纪要
  4. 开站例会
  5. 确保项目不延期
  6. 迭代风险管理

于此同时,也提到了高层对这一流程的干预等不可避免的问题。最后也讲到了日常工作的一些问题的解决方法,以及无线团队的组建和管理,从面试、文档、沟通、技术分析、代码评审、Android团队leader定位、Android开发自我评测、学习路线等方面来介绍如何打造一个无线团队。

3. 最后

总之呢这是一本很有特点的书,没有系统的知识介绍,如果你是一个项目的Team Leader ,那么我想它或许还是很适合你的。

分享到:
移动开发者/技术爱好者/喜欢开源与分享,你也可以关注微信公众号MobDevGroup,移动开发在线分享:MobDevGroup