当前位置: 首页 > article >正文

我的性能优化经验

专业方向: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性能优化”   专栏,一起成长


http://www.kler.cn/a/445573.html

相关文章:

  • 中间件 mysql安装
  • SpringCloud 集成 Eureka服务,本机测试
  • 如何快速提升网站的Google SEO流量?
  • 微信小程序:获取,修改data中的数据(直接取出,通过变量取出)
  • 阿里云Maven库地址、查看各个版本的jar包
  • Python球球大作战
  • petalinux 错误汇总
  • 品牌在社交媒体上的营销框架,有哪些重要节点?
  • Ubuntu软件更新及删除
  • 项目中常见的Mapper文件和接口
  • spring(三):如何通过配置文件实现依赖注入(DI)?set方法注入和构造器方法注入两种方式代码演示,两种注入方式的注意事项以及本质区别。
  • 用 Python 实现井字棋游戏
  • Visual Studio Code 快捷键
  • 12.6深度学习_经典神经网络_LeNets5
  • java 选择排序,涵盖工作原理、算法分析、实现细节、优缺点以及一些实际应用场景
  • 如何将多张图片合并为一个pdf?多张图片合并成一个PDF文件的方法
  • 海思芯片 交叉编译curl
  • mysql面试核心概念
  • 网络攻防章节测验
  • 解决QT制作的软件,全屏显示后最小化,点击任务栏图标打开时不是全屏而是窗口状态的问题