App性能优化
背景&目的
- 用户体验
- 业务转化
- 降低成本
领域
- 包体积
- 电量
- 页面打开速度
- 图片
- 流畅度
技能
基础知识
计算机基础
-
网络基础
- dns
- tcp
- ssl
- http
- cdn
-
java虚拟机
- 运行机制
- 内存/gc
- 线程
- classloader
-
Android原理
GUI绘制原理
-
运行原理
- 事件循环
- 启动原理
- IPC调用
apk产物构建原理
富媒体编解码
-
其他
- java混淆
工具
-
android profiler
- Networking Traffic Tool
- Memory Monitor
- Allocation Tracker
- Heap Tool
- traceview
-
android device monitor
- Systrace
- HierarchyViewer
- Thread dump
-
android手机端
- GPU过度绘制
- GPU呈现模式分析
- 显示GPU视图更新
- 严格模式
-
电量分析工具
- WakeLock Dector
- Battery History Tool
-
内存分析工具
- MAT\GIMP
- LeakCanary
- Wrap Shell
adb常用命令
Lint
Trepn Profiler
数据
采集
- firebase
- BlockCanary
- LeakCanary
呈现
- Play/Firebase 后台
- 微信Matrix
常用策略
网络
-
访问速度
- httpdns
- spdy/http2
- quic/http3
- tls1.3/slightSSL
- 就近访问CDN
- 分片传输
-
内容体积
- gzip
- json -> pb
- 图片格式、裁剪、质量
-
减少网络访问
- 缓存
- 访问频率
- 削峰、限流
内存
-
内存分配
- 合适大小图片
- 去掉alpha通道
- 使用流技术处理大对象
-
回收策略
- RecyclerView
- 避免内存泄漏
- 避免频繁创建对象
- 对象池
GPU
-
重复绘制
- 背景优化
- 自定义UI
-
减少层级
- ContraintLayout
- 善用merge
缩小刷新范围
IO
-
数据库
- sql优化
- 访问内容最小
- 索引
sp体积
内存缓存
电池
-
降低屏幕消耗
- 避免唤醒
- 降低屏幕亮度
- 避免长时间亮屏
减少CPU使用
CPU
-
算法优化
- 编解码优化
- 逻辑优化
- 避免死循环
- 缓存计算结果
-
善用多核
- rx
- stream api
-
耗时操作异步
- 网络
- IO
- 密集计算任务
包体积
-
架构升级
- App Bundle
- Dynamic Feature
-
减少资源
- R文件
- 无用资源
- 无用代码/sdk
-
降低资源占用
- zip高压缩比
- 图片合理大小
- 图片转xml
- so动态下发
- tinyPng
- 代码混淆、资源混淆