这是我参与「第四届青训营 」笔记创作活动的的第4天
青训营的课程很有价值,他的价值在于授之以渔,课程的分享思路非常值得学习。
Why? What? How?
一、为什么做性能优化
二、什么是性能优化
1.有哪些优化方向? 快:更快响应;
稳:运行更加稳定;
省:更加节约功耗
2.我们应该优化什么? (1)流畅性优化
了解Android的线程结构,对界面刷新进行优化(UI drawing).
通常做法是耗时线程不写入主线程,Android中常用子线程。
(2)资源优化
软硬件资源、功耗、存储、流量、系统参数...... 最常用的是存储和功耗。
(3)稳定性优化
不稳定通常分为两种情况:程序崩溃和程序请求超时。
(4)系统级的优化
移动操作系统和硬件厂商的性能优化。
3.性能优化工具
| 工具名称 | 工具作用 |
|---|---|
| GPU呈现模式 | 流畅性问题 |
| LayerTool | 布局问题 |
| CPU profile | 初级性能归因 |
| TraceView | 中级性能归因 |
| Systrace | 高级性能归因 |
| Battery Historian | 功耗问题 |
三、如何做性能优化
1.分析耗时成因
| 常见原因 | |
|---|---|
| CPU time | 循环,反射,序列化和反序列化 |
| IO wait | IO操作,等待IO返回结果 |
| IPC | Binder 调用耗时 |
| Lock Wait | 主线程是等锁状态,等待其他线程或自己超时唤起 |
| CPU Schedule | 主线程是可执行状态,但是获取不到CPU时间片 |
主要原因类型:主线程优化、运行时优化、后台线程优化
2.渲染分析
常见优化的举例
①UI构建 XML文件解析:IO Load
Tag Name获取Class : Java reflect
创建子View生成View Tree
② 数据绑定
数据请求-》解析-》适配
更新UI:setText
③ View显示
measure、Layout、draw
SurfaceFlinger
HardwareCompose