Android 《Android移动性能实战》学习笔记

Android 《Android移动性能实战》学习笔记

一、简介

二、《Android移动性能实战》笔记

三、内容推荐


一、简介

最近忙着吸收营养都没什么时间乱搞了。不过想想还是不能放弃更新步伐,即使没什么营养,废话一大堆 也要写出来,不然别人就不知道作者有多啰嗦了。最近刚看完了一本《Android移动性能实战》,文采不好,观后感我就不写了。这篇文章记录一下开发注意事项。当然为了不花费更多时间在写文章上面,就直接CP了,没读过这本书的朋友可以了解一下里面有什么内容。读过可以再复习一遍。。。

Android 《Android移动性能实战》学习笔记

二、《Android移动性能实战》笔记

一句话概括:本书来自腾讯SNG专项测试团队,记录了优化QQ性能过程的案例并总结优化性能的方法。

文章摘录如下:

1.磁盘优化

遵循原则

标准 优先级 规则起源
避免主线程I/O 避免主线程操作文件和数据库 P0 50%以上的卡顿问题都是由主线程I/0引起的
用apply代替Sharepreference.commit P1 apply是异步操作,commit是同步操作
提前初始化Sharepreference P1 在多进程和旧版本的Android中,初始化过程的I/O读/写是在主线程的
减少I/O读写量 减少使用select * P1 减少从数据库读取的数据量,减少耗时
利用缓存减少重复读写 P2 内存缓存命中率极高,投入产出高
数据库减少AUTOINCREMENT P1 因为要多操作一个表,所以Insert耗时减少2~4倍
使用合适的数据库分页 P0 sqlite读/写磁盘是以page为单位的,在3.12.0版本之前,Sql默认page size是1KB,从3.12.0开始,page size调整为4KB
频繁查询的表使用索引 P0 索引可以极大地减少读磁盘的数据量,极大的提升效率
避免无效索引 P0 无效索引的问题通常是严重的。除了触发全表扫描,产生大量冗余的读/写之外,还降低了写入性能。
减少I/O操作次数 使用8KB buffer读/写 P0 可以减少2~3倍的耗时
批量更新数据库使用事务 P0 启用事务,根据业务规模,会大量减少I/O读/写量和操作次数,从而提升效率
ZIP压缩大量小文件时建议使用ZipInputStream P2  
2.内存优化

遵循原则

标准 优先级 规则起源
避免内存泄漏 避免Activity泄漏 P0 大部分严重的内存泄漏都是Activity泄漏,因为这意味着被引用的View,图片等全部泄漏
减少常驻内存 尽量使用RGB565 P1 手机QQ使用RGB565将节省部分图片的内存,高达50%
避免内存重复 P1 手机QQ去掉头像30%的重复缓存,提升缓存的命中率与流畅度
res/drawable里的图片,建议使用Drawable.createFromStream来加载 P1 使用错误的文件夹,导致图片被放大,最终APP使用的内存增加
将图片放置到合适的资源文件夹(hdpi/xxhdpi等) P1
减少GC Bitmap尽量使用inBitmap P1 可以减少GC,提升流畅度
建议使用SpraseMap或者ArrayMap P2  
建议StringBuilder重用(如果有线程使用可配合ThreadLocal) P1 手机QQ与QQ空间的日志改造,利用delete来替代new,给予合理的初始化长度,写日志性能提升多倍
3.网络优化

遵循原则

标准 优先级 规则起源
避免无效流量消耗 避免重复上传与下载 P0  
JS/CSS/HTML需要进行压缩 P0 手机QQ之前部分JSON没有使用gzip,优化后成功率上升50%,速度提升2倍
使用更优的图片压缩 P1 QQ空间装扮WebP优化后,图片下载/图片展示的速度提升了,带宽优化20%
前台网络I/O<60KB(要依赖网络下载完成才能展示内容) P1 大于60KB用户体验极差
定时网络请求尽量合并在一个时间进行 P2 无论是4G还是3G都有所谓的网络状态机,合并请求可以让网络尽量处在低功耗的状态
网络请求失败的重试必须有明显的结束条件 P2 会导致严重耗电和服务器压力过大
降低流量风险 流量兜底能力 P0 微信发现流量异常会通过后台服务器终止协议交互。这是不让问题恶化的好方法

 

4.CPU优化

遵循原则

标准 优先级 规则起源
核心场景CPU算法最优 建议能用int的不要用float P2 比较两个float数值大小的执行时间是int数值的4倍左右。这是因为CPU的运算架构所致
选择合适的容器 P0 一般的容器:Vector/HashMap/LinkedHashMap等;Android提供在内存稀缺的性能场景使用的容器:ArrayMap/SparseArray等;基于线程安全。ConcurrentHashMap等。
使用缓存和批量预处理来提升算法效率 P1 QQ空间装扮WebP优化后,图片下载、图片展示的速度提升了,带宽优化20%
充分利用CPU 根据CPU性能,选择合适的线程数 P0  
5.电池优化

遵循原则

标准 优先级 规则起源
尽量让CPU休眠 锁屏、灭屏、程序放置后台时,释放或停止Android涉及耗电的服务 P1 包括GPS/WifiManager/Sensor等
锁屏、灭屏释放WakeLock P0 必须释放WakeLock,无论是间接还是直接的,否则会让CPU无法休眠,导致严重的耗电问题
使用缓存和批量预处理来提升算法效率 P1

QQ空间装扮WebP优化后,图片下载/图片展示的的速度提升了,带宽优化20%

避免无端电量消耗 程序后台CPU不能连续工作5分钟且平均超高5% P0  
6.流畅度

遵循原则

标准 优先级 规则起源
界面流畅 核心界面必须有流畅度和掉帧率的数据上报 P0  
FPS平均值大于30,最小值大于24 P0 Intel的研究表明,动画大于24FPS是用户可以接受的最低标准
避免>8的掉帧,尽量减少掉帧 P1  
7.响应时延

遵循原则

标准 优先级 规则起源
响应时延 核心界面必须有响应时延的数据上报 P0  
启动速度大于2秒 P0  
界面切换速度小于500ms P0 Intel的研究表明,时延小于500ms是用户可以接受的最低标准
避免黑屏 P0 黑屏的用户体验是最差的,而且可以有很多手段避免

具体案例细节请查阅书籍..

Android 《Android移动性能实战》学习笔记

三、内容推荐

简书:《Android 《Android移动性能实战》学习笔记》

《Android 下载安装应用APK封装(适配8.0)》

《Android Notification通知简单封装(适配8.0)》

《Android 仿RxDialog自定义DialogFragment》

《Android 获取App应用、缓存、数据等大小适配8.0(仿微信存储空间)》

 

如果你觉得写的不错或者对您有所帮助的话

不妨顶一个【微笑】,别忘了点赞、收藏、加关注哈

看在花了这么多时间整理写成文章分享给大家的份上,记得手下留情哈

您的每个举动都是对我莫大的支持

Android 《Android移动性能实战》学习笔记