1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//性能优化
性能优化:包括了启动,内存,布局,卡顿,网络,电量,瘦身,稳定性;
性能监测平台:外网:听云,内网:自检各种性能检测机制,统一上报;

//App启动优化
1.获取启动耗时:
1.手动埋点,aop统一处理,systrace/traceview获取
2.优化手段:延迟加载或者异步加载(充分利用CPU,将任务放到子线程中执行分担主线程任务,jetpack的App Startup框架,或者自定义使
用线程池异步加载)

//内存优化:内存优化主要体现在两个地方,第一个是内存抖动,第二个是内存泄漏
1. 内存抖动: 主要是由于快速的内存创建和释放造成的,容易产生GC(Profiler);
2. 内存泄漏:主要是由于长生命周期的引用了短生命周期的对象造成的(leakcary);
3. 检测方式:AS的Profiler(Memory Profiler/Memory Analyzer)主动检测,leakcary被动的自动检测;

//布局优化
1. 绘制时长检测:
1.AOP(面向切面编程,在指定的地方执行特定的代码)的方式获取每个界面的绘制耗时;
1.Systrace查看整体绘制情况,查看是否存在绘制耗时等情况;
2.as自带的布局检测工具Inspector,查看视图层次结构;
2.如存在io加载布局文件慢
1.使用AsyncLayoutInflater/X2C异步加载布局
3. 布局层级:减少布局层级,减少过度绘制
1.减少View树层级
2.宽而浅,避免窄而深
3.尽量使用 ConstraintLayout布局控件
2.gpu过度绘制//开发者选项-调试gpu过度绘制打开设置
1.一个像素最好只被绘制一次
2.调试GPU过度绘制
3.蓝色可接受
3. 卡顿的原因就是CPU数据处理不过来,比如层级过深,CPU太忙,GC,之类的,可以通过systrace 工具进行检测,
然后通过编舞者监测帧率定位时间,再然后可以通过looper的日志功能定位到卡顿点。网上也有库blockcanary
3.在Systrace 报告中,你可以查看应用程序布局绘制的相关事件,包括布局计算、绘制命令的发送、GPU 图形呈现等阶段所花费的时间

//卡顿优化
1.硬件性能导致卡顿:CPU Profiler/Systrace 分析查看CPU利用率
2.使用blockcanary可以实现自动化监测卡顿
3.anr检测:ANR-WatchDog,logcat/trace.txt日志分析信息

//网络优化
1.网络缓存:
1.服务端返回加上过期时间,避免每次重新获取
2.OkHttp、Retfort、Volley都有较好实践
3.无网络时展示数据缓存;
2.网络质量:
1.时长、业务成功率、失败率的统计,在OkHttp、Retfort、Volley等自行统计相关数据并在特定场景合并上报;
2.弱网络模拟
3.增量更新:
1.加上版本的概念,只传输有变化的数据
4.数据压缩:
1.Post请求Body使用GZip压缩(字符压缩)
2.图片上传之前必须压缩
5.图片相关:
1.图片使用策略细化:优先缩略图
2.使用WebP格式图片

//电量优化
1.电量优化检测方案:
Battery Historian
- Google推出的一款Android系统电量分析工具
- 支持50(API21)及以上系统的电量分析
- 功能强大,推荐使用
- 可视化展示指标:耗电比例、执行时间、次数
- 适合线下使用
2.电量优化套路总结:
1.网络相关:控制请求时机及次数,数据压缩,减少时间
2.传感器相关:
1.根据场景谨慎选择定位模式
2.考虑网络定位代替GPS
3.使用后务必及时关闭,减少更新频率

//瘦身优化
1.代码混淆,统一三方库、删除无用代码
2.资源在线化
3.So:只保留Armeabi、或者只保留armeabi-v7a、arm64-v8a
4. 图片优化:
1.根据场景使用不同的文件,比如将png换成webp,像什么需要来回改变的简单的图可以使用svg替换,去除不需要的图片资源
2.图片压缩
5. 备用资源:默认情况下Android会有很多备用资源,比如string,包含了多国语言,我们可以指定需要的语言即可;

//稳定性优化
1.统一编码规范、增强编码功底、技术评审
2.架构优化:统一容错,功能模块解耦
3.回归测试,压力测试,兼容性测试,
4.容灾方案:热更新(bugly),功能开关,崩溃后自启等