这本书基本上涵盖了移动开发中常见的关注点,之所以用关注点而不用技术点这个词是因为这本书并没有讲到具体的技术实现,但提供了行之有效的解决方案。读这本书的时候非常有感触,它很多的框架设计和解决方案与我实际开发中都是不谋而合的(有点自夸的意思哈)。所以也非常感谢作者能这么详细的记录下来。这篇读书笔记是记录我在阅读过程中感觉需要重点强调的地方和自己的一些理解,也供大家能快速的浏览本书的章节。

关于重构

  • 对于新项目,一开始就要把它设计好,因为产品留给我们的重构机会不多

  • 对于老项目:

    1、如果不重构带来的开发难度或者引发的bug 很严重,那么必须要跟产品商量了。

    2、重构的代码一定的在本期迭代上线后,再合并到下期代码里。

    3、重构计划要详细要拆分到几次迭代里,分期上线。

  • AndroidLib

    搭建一套AndroidLib,或者叫Common,它里边封装了所有于业务无关的逻辑。这样做为后期的Android模块化 和 Android插件化开发打下基础。(模块化开发和插件化开发是两个不同的概念)

    这里有人可能会问把所有的与业务无关的逻辑封装在一起会不会耦合性太高?其实封装和解耦本来就是一对矛盾的概念,需要我们自己合理的把握设计,我们这里讲的AndroidLib只是为一个特定的App做框架支持,所以不存在耦合性,假如有多个App需要,则必须把AndroidLib拆分成更小的Lib以适应灵活的场景。

  • 重构后的项目结构

    在拆分package(iOS里Group)原则上,建议按照bu(业务单元)来分,而不是按照Class来分。因为一个App的bu是不断变化,不断增加的,而Class的类型随着API变化不会变化太大,例如Android上常用就是Activity、Fragment、Adapter等等。

网络底层的优化

  • 我们需要做一个BaseCallback来做统一的onStart、onFinish、onFail、Cookie过期的处理,例如在onStart里进行showDialog、在onFinish里隐藏Dialog,在Cookie过期后调整登录页。这个地方是一个有争议的设计,因为网络请求的Callback从分层设计上应该属于Modle,不应该跟UI耦合在一起。在我个人而言更喜欢把BaseCallback看做一个Component,而不是单纯的一层Model,这样更好理解。

HTTP头的利用

  • 我们在MobileAPI 设计的时候,一开始就要把当前App的信息通过Http Header告诉服务器,以便服务端调度Api。一般的做法是把App的package、platform、version等等放在UserAgent里告诉服务端。

  • 对于手机系统时间不准的问题,该书也有提到,每次调用服务器api时,服务器api都在reponse header里返回服务器的时间,然后跟手机系统时间做时间差,然后每次本地获取时间就加上这个时间差。

App图片缓存设计

  • 该书介绍了Fresco的三层缓存技术

    1、Bitmap缓存,在Android5.0及以上Bitmap直接缓存于dalvik vm heap中,而在4.x 及以下bitmap缓存在 native heap (ashmem)中,因为dvm对heap大小是有限制的,如果超过这个限制就是OOM

    2、内存缓存:内存缓存存储了图片的原始压缩格式,从内存缓存取出图片后需要先解码才能显示。这个地方会经常提到的Lru 和 SoftReference,SoftReference在2.3以后不再推荐了,因为垃圾回收机制做了修改。

    3、磁盘缓存

网络流量的优化

  1. API返回数据要使用gzip压缩,大于1kb才有必要进行压缩否则得不偿失

  2. 推荐使用ProtoBuffer,这种协议是二进制格式的,占空间更小。

  3. 减少API调用,一个页面尽量只发一个请求获取所需要的数据。

  4. http1.x 是不支持多路复用,为了提升访问速度可以做TCP长连接或者使用http2.0,当然维护一套TCP长连代价也是不小的。

  5. 建立取消网络请求的机制,这个最新的retrofit2.0 原生支持推荐使用。

  6. 合理的重试机制

  7. 大数据列表的增量更新机制,当遇到一个很大的列表数据有改动时,最好使用增量更新机制来减少传输的数据量。

图片策略优化

  • 做一套ImageServer,App请求图片url时会带上它需要的width、height、图片质量,然后由ImageServer对原始图片做压缩处理。目前有很多厂商提供这种服务,比如七牛。

  • App是不是需要把每个ImageView的width、height获取到呢,按照我的经验只需要给App定义大、中、小三套width、height基本就够用了。

  • 在弱网情况下再定义一套图片质量(quality)的值,就会减少弱网下的流量。

App与H5的交互

  • 定义一套App 和H5 之间跳转协议,可以通过JS 或者 OverrideUrl来实现。这个跳转协议里可以定义简单的数据类型,String不需要指定,对于int、double需要在值钱记上类似(int)这个的标记,这样App才能正常解析。

常见错误

  • JSONObject 和 JSONArray是不支持序列化的,所以最好是转换成相应的可序列化的Model再使用。

代码规范

  • 在xml的文件名命名时最好加入module(或者叫bu)的名字,例如account_adduser_activity.xml

  • 空格、tab、换行这些格式建议一个团队里统一规范,建议使用工具自动检查:AndroidCodeQuality

  • 将代码里的常量抽取到string.xml中:这个也可以使用工具自动检查:AndroidLintPlus

安装包大小

  • png 和 jpg 的区别和使用场景

    同样尺寸的图片,png要比jpg大很多,因为png是有透明通道、无损压缩的。但系统会对png进行硬件加速,所以同一张图,png体积大但加载速度却比jpg快。

  • 从网络加载的图片考虑到流量和下载速度优先使用jpg,对于引导图,也倾向于使用jpg,减少包体积。对于iOS启动图必须是png,否则审核会被拒。

    Google发布了压缩率更高的WebP,不过iOS想要支持这种格式需要单独引入WebP解码器。

  • 单色的icon可以转换成字体文件,因为字体是矢量图拉伸不会失真,并且体积会很小。

热修复能力

  • Android 有andfix、nuwa等,ios有jspatch ,这里就不在展开了。

后门

后门里常做的功能有:

  1. API服务器切换,极大的方便测试人员。

  2. 打印请求API的请求参数和返回结果,不用每次都开代理和后端联调。

  3. 提供一个后门页面供H5团队调试H5是否与Native工作正常。

  4. 更多的还有 流量统计、电量统计

《App研发录》读书笔记相关推荐

  1. 读书笔记 | 墨菲定律

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  2. 读书笔记 | 墨菲定律(一)

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  3. 洛克菲勒的38封信pdf下载_《洛克菲勒写给孩子的38封信》读书笔记

    <洛克菲勒写给孩子的38封信>读书笔记 洛克菲勒写给孩子的38封信 第1封信:起点不决定终点 人人生而平等,但这种平等是权利与法律意义上的平等,与经济和文化优势无关 第2封信:运气靠策划 ...

  4. 股神大家了解多少?深度剖析股神巴菲特

    股神巴菲特是金融界里的传奇,大家是否都对股神巴菲特感兴趣呢?大家对股神了解多少?小编最近在QR社区发现了<阿尔法狗与巴菲特>,里面记载了许多股神巴菲特的人生经历,今天小编简单说一说关于股神 ...

  5. 2014巴菲特股东大会及巴菲特创业分享

     沃伦·巴菲特,这位传奇人物.在美国,巴菲特被称为"先知".在中国,他更多的被喻为"股神",巴菲特在11岁时第一次购买股票以来,白手起家缔造了一个千亿规模的 ...

  6. 《成为沃伦·巴菲特》笔记与感想

    本文首发于微信公众帐号: 一界码农(The_hard_the_luckier) 无需授权即可转载: 甚至无需保留以上版权声明-- 沃伦·巴菲特传记的纪录片 http://www.bilibili.co ...

  7. 读书笔记002:托尼.巴赞之快速阅读

    读书笔记002:托尼.巴赞之快速阅读 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<快速阅读>之后,我们就可以可以快速提高阅读速度,保持并改善理解嗯嗯管理,通过增进了解眼睛和大脑功能 ...

  8. 读书笔记001:托尼.巴赞之开动大脑

    读书笔记001:托尼.巴赞之开动大脑 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<开动大脑>之后,我们就可以对我们的大脑有更多的了解:大脑可以进行比我们预期多得多的工作:我们可以最 ...

  9. 读书笔记003:托尼.巴赞之思维导图

    读书笔记003:托尼.巴赞之思维导图 托尼.巴赞的<思维导图>一书,详细的介绍了思维发展的新概念--放射性思维:如何利用思维导图实施你的放射性思维,实现你的创造性思维,从而给出一种深刻的智 ...

  10. 产品读书《滚雪球:巴菲特和他的财富人生》

    作者简介 艾丽斯.施罗德,曾经担任世界知名投行摩根士丹利的董事总经理,因为撰写研究报告与巴菲特相识.业务上的往来使得施罗德有更多的机会与巴菲特亲密接触,她不仅是巴菲特别的忘年交,她也是第一个向巴菲特建 ...

最新文章

  1. 前端开发学习笔记(二)
  2. 系统网卡性能,丢包率与下载上传,ulimit设置
  3. python无法安装tensorflow_python – 无法安装Tensorflow Mac
  4. Android 拉起小程序页面进行传值
  5. 每日一笑 | IE的反射弧也太长了吧......
  6. android抽屉屏幕右滑,android - Android - 使滑动抽屉从左向右滑动 - 堆栈内存溢出...
  7. XPath语法及使用
  8. Eclipse/STS 在线安装阿里java代码规约插件
  9. linux centos7.9中安装docker的3种方式-图解
  10. HDOJ-2095 Find your present (2) / NYOJ-528 找球号(三)
  11. 储存卡怎么格式化为fat32_64g储存卡怎么格式化成fat32格式化
  12. 【quick-cocos2d-lua】 疯狂牛牛
  13. 怎么解决pdf乱码问题呢?
  14. 三种数据库的 SQL 注入详解
  15. printf \a 响铃的流程(你想知道的C语言 1.9)
  16. 公司辞退了一名员工,虽然他是元老级别
  17. 如何做好网站安全防护 防止网站被黑?
  18. word20170105订酒店 hotel reservation有用的词和句子
  19. 眼科刀行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  20. echarts设置饼状图的标示线以及标示文字的颜色等相关样式

热门文章

  1. 计算机专业游戏本后悔,毕业了,到底要不要买游戏笔记本电脑?好多人买了都后悔了?...
  2. ffmpeg m3u8 与 mp4 相互转换
  3. 富格林金业:原油天然气怎么掌控买卖点?
  4. Excel最大值和最小值的提取问题
  5. poi实现多线程大数据导出
  6. #SATA# SATA 实际管脚接线图
  7. 入门级node+uni-app开发即时通讯聊天室(3)用户的搜索以及好友添加(二)
  8. Python攻城师的成长————MySQL数据库关键字
  9. 树莓派博通BCM2835芯片手册导读及io口驱动代码的实现
  10. 11.3 作业 Problem L: 数字统计