专业方向:App cpu/memory/gpu/流畅度/响应时间的优化,Anr,Framework CarPowerManagementService模块的(STR),从0~1完成性能监控体系搭建,完成3大版本迭代高质量性能交付
响应时间:
- 冷启动:预编译,预加载,懒加载
- 热启动:启动阶段boost,分析主线程耗时,binder调用
- 开机启动:裁剪,合理调整app启动顺序
- 点击响应慢:UIBlockMonitor检测主线程卡顿;点击卡死(anr和假卡死)
流畅性:
- 列表流畅:通讯录滑动卡顿(数据结构不同),分类滑动卡顿(recyclerview嵌套framgment),歌单列表滑动卡顿(纵向列表带上横向列表)
- 视频流畅:4路dvr和360环视卡顿(cpu和gpu tunning),视频卡(底层解码器问题,从log(QC2Comp入手
- 系统卡顿:startService风暴,Binder风暴,内存低或smmu fault等资源不足导致卡死
- 跟手性:从trace找到Unity车模异常耗时任务
CPU:
-
组件:marqueue,shadowContainer
- 动画优化:
属性动画:修改属性动画帧率
自定义动画: VoicePlayerView 定时器计算并请求绘制
旋转动画:降帧,降速,降renderthread cpu占用
- gc:延迟gc,修改gc 阈值,对象池缓存(减少内存抖动)
- 业务架构优化:音乐随动,车设和后排屏
Memory:
24小时无泄露,App小于700M
- 抓取分析native,java,显存,window,fd内存泄露
- 建立慢速,快速泄露内存抓取机制
Memory分析工具
监控工具 | 项目经验 | |
Native泄露 | perffeto,raphale,androidstudio | map 快速泄露 |
Java泄露 | Hprof | HashMap,Bitmap,Service,Binder,webview泄露 |
显存泄露 | 读bufinfo | camera多次打开失败,Opengl context 未释放导致 |
Window泄露 | Dumpsys 、读bufinfo | 弹出大量一样的window |
Unity泄露 | UnityMemoryProfiler | 桌面快速泄露 |
gpu:占用率,优先级,带宽优化
3年职业规划
短期:
framework层面优化:禁止app自启动、根据系统资源动态调节最大缓存数量
性能工具优化:
【Hprof 压缩(500M以上展示不出来),自动扫描jni内存泄露,bugreport优化(传入pid或调用关键用户进程的调用栈),重复log打印detecter(接入自动化监控)】
长期:
- bug智能诊断(bug自动归类),cpu调优,低fps监控,native内存工具
- cgroup调优,内存踩踏分析,native内存泄露工具建设 https://zhuanlan.zhihu.com/p/371527210
(热启动优化)
- Android系统层面的优化,Linux 内核层面优化
更详细性能优化方法:欢迎订阅 “Android性能优化” 专栏,一起成长