Android 系统性能优化(11)---UC性能优化方案
2018-03-24 09:45
381 查看
一、性能优化六项指标:
性能、内存、稳定性、流量、电量、安装包大小;
二、背景 ---- Android程序卡顿产生原因: 1、Android系统低效 --渲染线程、同步接口、广播机制 :没有独立的渲染线程 :广播机制引入,可能同时又几百个广播机制在后台运行 2、运行环境恶劣 --后台进程、安全软件 3、低端机占比高 --低内存、弱cpu、IO瓶颈 :开源平台,导致高中低端的机型普遍存在;; :低内存影响最大,一般可用内存在小于50M,意味着会由于小于50M就会杀死一些进程来维护内存的大小 : GPU是其次; :读写速度比较慢,在有的手机上; 4、产品考虑不足 --功能定义简陋、功能堆积严重 : 一般的产品只会考虑需求,我要做什么,而并没有把整个闭环考虑清楚; :在版本迭代的过程,在不注意间可能启动过程会越来越慢; 5、技术考虑不足 --很多
三、用户反馈应用卡顿怎么办? 困难: 1、复现性 -- 用户描述模糊、不稳定出现(复现率比较低); 2、定位难 -- 不同机型、固件、系统状态表现不一 --程序细节多、可疑面广 3、衡量难 -- 卡顿严重程度难以量化 -- 卡顿问题不便分类 : 是有一点卡、非常卡、还是什么 : 没有针对性的目标,提升百分之多少等等,不知道极限在哪里;
四、解决思路 1、卡 vs 顿,卡为主,顿为辅。卡和顿没有一个明显的界限,大部分顿的问题当环境足够恶劣时就会表现为卡。所以抓住卡,就能解决很多问题。
2、打点统计 vs 全局监控: 短期目标:主路径性能保障,打点统计; 长期目标:整体的卡顿优化,全局监控;
3、 线下分析 vs 线上监控: 线下分析:实验室调试去复现一个问题,精确定位、粒度细; 线上监控:指标衡量、粒度粗。
4、打点统计分析: (1)、启动速度 (2)、响应速度 (3)、版本比对 : app版本、Android版本 5、用户反馈分析: 将用户性能方面的反馈,测试人员进行分析,以邮件形式发送给技术负责人,进行分析; 反馈等级: --预警机制 --用户分类 --功能分类 -- 纵向对比 6、anr日志分析: --精确定位 : 堆栈信息比较清晰 --数据量化 主线程超时(5s ---> 1s) -- 暴漏更多蕾体 -- 精确定位问题 -- 方便用户联调 -- 如果一个按钮响应时间超过800ms,用户感知起来就会很难受了。 7、全局监控 -- Looper Hook -- 监测系统消息循环 --计算消息耗时 -- 定位耗时点 卡顿:无非就是主线程被卡住了,就是主线程的消息循环里面的某一帧执行时间非常长,导致后续的消息无法来得及执行, 数据指标卡顿率: 卡顿用户数/日活总数 8、 问题回顾: -- 下载界面展开卡顿: 分段加载 -- 二维码界面展示慢: 延时加载、先出界面在初始化相机 -- 启动完成后操作卡: 线程枪战,低优先级后台进程+队列 -- 共享存储卡顿: sharedPerference( 主线程IO , commit(主) ---> apply(子)) -- 视频播放控制卡顿(API兼容性问题,异步化,视频播放停止暂停线程) -- 获取网络代理卡顿(IPC异常【进程间通信】,异步DNS+缓存) -- 第三方反馈卡死(固件问题,shield Activity,全部采用一个新的activity去做,这样不会对原来activity产生影响) -- 网页滑屏操作卡顿(GPU加速 开启硬件加速) -- So加载/jni注册卡(异步加载 + 时序控制) -- 安全软件事件拦截(沟通反馈) --微信卡顿(调频、文件系统优化)
五、经验推广: 禁止: -- 主线程文件IO(标记文件读写外) -- 主线程耗CPU操作 -- 主线程同步IPC调用(时间不可预期) 推荐: -- 异步化 【1】、 产品及程序设计 : 加载肯定是需要时间的,不可能实时展现; 【2】、预加载 (数据必备,功能执行之前将这些事先数据准备好) 【3】、闲时加载: 利用cpu的闲时做一些事情,主线程会设置一个ido handler,主线程所有消息操作完成之后会回调一个handler 【4】、按需加载 -- 线程管理 1、线程量限制 + 任务队列 2、非主线程优先级调低 --压力测试 -- 防御式编程 -- 全局性能检测 六、延伸 -- 精确化 & 自动化 用户反馈、卡顿日志 -- 新监控方案 Api Hook -- 新优化方案 卡顿率 --> 帧率 低端机优化
性能、内存、稳定性、流量、电量、安装包大小;
二、背景 ---- Android程序卡顿产生原因: 1、Android系统低效 --渲染线程、同步接口、广播机制 :没有独立的渲染线程 :广播机制引入,可能同时又几百个广播机制在后台运行 2、运行环境恶劣 --后台进程、安全软件 3、低端机占比高 --低内存、弱cpu、IO瓶颈 :开源平台,导致高中低端的机型普遍存在;; :低内存影响最大,一般可用内存在小于50M,意味着会由于小于50M就会杀死一些进程来维护内存的大小 : GPU是其次; :读写速度比较慢,在有的手机上; 4、产品考虑不足 --功能定义简陋、功能堆积严重 : 一般的产品只会考虑需求,我要做什么,而并没有把整个闭环考虑清楚; :在版本迭代的过程,在不注意间可能启动过程会越来越慢; 5、技术考虑不足 --很多
三、用户反馈应用卡顿怎么办? 困难: 1、复现性 -- 用户描述模糊、不稳定出现(复现率比较低); 2、定位难 -- 不同机型、固件、系统状态表现不一 --程序细节多、可疑面广 3、衡量难 -- 卡顿严重程度难以量化 -- 卡顿问题不便分类 : 是有一点卡、非常卡、还是什么 : 没有针对性的目标,提升百分之多少等等,不知道极限在哪里;
四、解决思路 1、卡 vs 顿,卡为主,顿为辅。卡和顿没有一个明显的界限,大部分顿的问题当环境足够恶劣时就会表现为卡。所以抓住卡,就能解决很多问题。
2、打点统计 vs 全局监控: 短期目标:主路径性能保障,打点统计; 长期目标:整体的卡顿优化,全局监控;
3、 线下分析 vs 线上监控: 线下分析:实验室调试去复现一个问题,精确定位、粒度细; 线上监控:指标衡量、粒度粗。
4、打点统计分析: (1)、启动速度 (2)、响应速度 (3)、版本比对 : app版本、Android版本 5、用户反馈分析: 将用户性能方面的反馈,测试人员进行分析,以邮件形式发送给技术负责人,进行分析; 反馈等级: --预警机制 --用户分类 --功能分类 -- 纵向对比 6、anr日志分析: --精确定位 : 堆栈信息比较清晰 --数据量化 主线程超时(5s ---> 1s) -- 暴漏更多蕾体 -- 精确定位问题 -- 方便用户联调 -- 如果一个按钮响应时间超过800ms,用户感知起来就会很难受了。 7、全局监控 -- Looper Hook -- 监测系统消息循环 --计算消息耗时 -- 定位耗时点 卡顿:无非就是主线程被卡住了,就是主线程的消息循环里面的某一帧执行时间非常长,导致后续的消息无法来得及执行, 数据指标卡顿率: 卡顿用户数/日活总数 8、 问题回顾: -- 下载界面展开卡顿: 分段加载 -- 二维码界面展示慢: 延时加载、先出界面在初始化相机 -- 启动完成后操作卡: 线程枪战,低优先级后台进程+队列 -- 共享存储卡顿: sharedPerference( 主线程IO , commit(主) ---> apply(子)) -- 视频播放控制卡顿(API兼容性问题,异步化,视频播放停止暂停线程) -- 获取网络代理卡顿(IPC异常【进程间通信】,异步DNS+缓存) -- 第三方反馈卡死(固件问题,shield Activity,全部采用一个新的activity去做,这样不会对原来activity产生影响) -- 网页滑屏操作卡顿(GPU加速 开启硬件加速) -- So加载/jni注册卡(异步加载 + 时序控制) -- 安全软件事件拦截(沟通反馈) --微信卡顿(调频、文件系统优化)
五、经验推广: 禁止: -- 主线程文件IO(标记文件读写外) -- 主线程耗CPU操作 -- 主线程同步IPC调用(时间不可预期) 推荐: -- 异步化 【1】、 产品及程序设计 : 加载肯定是需要时间的,不可能实时展现; 【2】、预加载 (数据必备,功能执行之前将这些事先数据准备好) 【3】、闲时加载: 利用cpu的闲时做一些事情,主线程会设置一个ido handler,主线程所有消息操作完成之后会回调一个handler 【4】、按需加载 -- 线程管理 1、线程量限制 + 任务队列 2、非主线程优先级调低 --压力测试 -- 防御式编程 -- 全局性能检测 六、延伸 -- 精确化 & 自动化 用户反馈、卡顿日志 -- 新监控方案 Api Hook -- 新优化方案 卡顿率 --> 帧率 低端机优化
相关文章推荐
- Android性能优化之UncaughtExceptionHandler定制自己的错误日志系统
- Android App 性能优化方案
- Android平台实战CRM客户关系管理(AChartEngine统计图表、异步任务、系统性能优化) 课程分享
- Android性能优化(11-16)
- Android系统性能优化备忘
- 关于Android性能优化的若干方案
- Android 性能优化方案大全
- Android 系统性能优化(15)---Android性能优化典范 - 第3季
- [置顶] 【Android性能优化】Android图片加载方案--Bitmap的内存管理和优化方案
- Android应用性能优化方案
- android 应用层性能优化方案
- Android 系统性能优化(16)--Android 系统性能优化第4季
- 【Android性能优化】内存泄露和内存溢出(OOM)的引发原因及优化方案
- Android性能优化的一些方案
- Android性能优化方案总结
- Android APP性能优化十大方案
- 《Android群英传》读书笔记(11)第十章:Android性能优化
- Android系统性能优化总结
- Android 系统性能优化
- 【Android】开发优化之——系统性能调优工具:TrackView,Systrace,Oprofile