客户端程序优化
2017-03-02 本文已影响0人
Freedoms1988
一、架构演化
1、独立型应用:
功能特征:�业务简单,用户操作体验简单,页面量少
开发团队特征:人数少,沟通方便,
业务特征:业务变化频繁,不稳定
2、平台型应用:
功能特征:业务稍复杂,用户操作体验稍复杂,页面量增多
开发团队特征:人数稍多,沟通成本已成为重要条件之一
业务特征:业务变化稳定,多增加新业务,少修改老业务,业务相关性低
3、生态型应用:
功能特征:业务复杂、关联性高,用户操作复杂,页面量大
开发团队特征:多团队开发,沟通成本较高
业务特征:业务变化稳定,多增加新业务,少修改老业务,业务相关性高
二、技术挑战
1、业务复杂性
页面多
流程复杂
业务关联性增强
2、设备多样性
设备配置参差不齐,高端设备、低端设备配置跨度大
网络状况参差不齐,优秀WIFI网络与GPRS带宽水平跨度大
三、性能优化指标
1、启动时间
2、运行流畅度
3、卡顿时间、次数
4、流量
5、重复下载
6、HTML加载速度
7、耗电量
8、内存占用
9、GC
10、WIFI扫描
11、安装包存储
12、本地缓存
四、最佳实践
1、电量优化
系统兼容性、业务、技术基础、Wakelock
耗电量增加指标:耗电排名、耗电率
引起耗电量升高因素:CPU使用率、定位服务、线程挂起、轮询服务、网络连接服务
解决思路:dump所有线程,观察线程消耗的CPU时间,从而定位到运行线程的代码
2、流量优化
增量更新、网络协议、RPC
流量增加指标:网络请求流量阈值
引起流量升高因素:网络请求、远程资源下载
解决思路:hook所有请求,指定流量阈值,针对超过阈值的请求进行协议优化、业务优化
3、内存优化
对象创建、对象占用、内存泄露
内存异常指标:频繁GC、内存消耗排名、长时间使用内存释放率
引起内存异常因素:内存泄露、Bitmap、异常长时间持有对象无法释放内存
解决思路:memtrace/hprof内存分析,遍历对象,释放无用Bitmap,HTML页面内存消耗分析,对象池复用
4、存储优化
缓存同步策略、增量更新
存储异常指标:内存增长过快,内存只涨不降
引起存储异常因素:缓存同步策略问题
解决思路:缓存同步策略优化、增量更新,尽早释放无用缓存
5、应用级架构优化
插件化、模块化、服务化
架构级异常:大中型应用多业务开启长连接、处理推送、处理即时聊天信息
引起架构级异常隐私:应用级架构设计问题,沟通不畅
解决思路:将应用中的业务进行模块化设计,降低功能与业务的耦合度,参考iOS系统的设计思路,将诸如:推送、缓存、心跳等基础服务功能从具体业务中独立出来,使多个业务通过统一标准调用此类基础服务,提高架构兼容性、稳定性、扩展性
五、稳定性
1、Crash优化
指标:Crash率 0.1%、持久性闪退 < 0.001%
2、启动闪退
指标:启动时间
3、启动卡死
指标:30s卡死
4、ANR
指标:5sANR
六、超级App的运维体系
1、异常监控
客户端:性能、电量、流量、内存、稳定性、异常统计上报
服务端:异常分析、提取特征、风险预测、自动报警、状态跟踪
2、电量计算
系统级数据采集:BatteryStatsHelper -> BatteryServiceImpl -> batterystats.bin
电量消耗模型
维度:CPU,Wakeup,Wakelock,WIFI,Tcp,WIFIScan,Sensor
权重:power_profile.xml @ framework-res.apk
关键技术优化:Androidv4.4之后,系统收掉电量权限。目前获取电量办法是模仿整个Android系统计算电量,即从BatteryStats.bin中获取每一个维度的权重,将维度和权重结合就可以算出Android系统的耗电量。
3、快速定位诊断
电量诊断:自动收集CPU、Sensor、Wakelock的耗电数据、dump线程栈
流量诊断:自动收集高流量url
闪退诊断:捕捉native闪退日志,内存状态日志
本文将不定期更新,敬请关注。
参考文章:https://yq.aliyun.com/articles/59942?spm=5176.100239.blogcont69316.94.YliSMO
感谢:阿里云栖社区