我的性能优化经验
专业方向: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性能优化” 专栏,一起成长
相关文章:
我的性能优化经验
专业方向:App cpu/memory/gpu/流畅度/响应时间的优化,Anr,Framework CarPowerManagementService模块的(STR),从0~1完成性能监控体系搭建,完成3大版本迭代高质量性能交付 响应时间: …...
XSLT 编辑 XML
XSLT 编辑 XML 介绍 XSLT(可扩展样式表语言转换)是一种用于转换XML文档的语言。它允许开发人员将XML数据转换为其他格式,如HTML、PDF或纯文本。XSLT通过使用XPath查询来定位XML文档中的元素,并对这些元素应用转换规则。在本教程…...
数智读书笔记系列010 生命3.0:人工智能时代 人类的进化与重生
书名:生命3.0 生命3.0:人工智能时代,人类的进化与重生 著者:[美]迈克斯•泰格马克 迈克斯・泰格马克 教育背景与职业 教育背景:迈克斯・泰格马克毕业于麻省理工学院,获物理学博士学位。职业经…...
Transfomer的各层矩阵
一、输入 输入一句话:Hello CYZLAB the inspired world 每个单词为一个token 二、Embedding 这里的词向量维度为6,矩阵的行数为token数,列数是词向量的维度 这列是注释不算hello122694CYZLAB222372the222596inspired132440world431273 …...
代码随想录第51天
99.岛屿数量 深搜 import java.util.*;class Main{static int[][] directions {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};static boolean[][] visited;public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int m sc.nextInt();int…...
基础库httpx的使用
urllib 库和 requests 库的使用,已经可以爬取绝大多数网站的数据,但对于某些网站依然无能为力。什么情况?这些网站强制使用HTTP/2.0协议访问,这时 urllib 和requests 是无法爬取数据的,因为它们只支持 HTTP/1.1,不支持…...
c++中如何保持结构体的线程安全?3D坐标的线程安全:从理论到最优解
使用mutex的困扰 struct Point3d {std::mutex mtx;double x, y, z;void set(double nx, double ny, double nz) {std::lock_guard<std::mutex> lock(mtx);x nx; y ny; z nz;} };这种方案虽然安全,但性能开销确实不小。每次访问都需要加锁解锁,…...
Zabbix6.0升级为6.4
为了体验一些新的功能,比如 Webhook 和问题抑制等,升级个小版本。 一、环境信息 1. 版本要求 一定要事先查看官方文档,确认组件要求的版本,否则版本过高或者过低都会出现问题。 2. 升级前后信息 环境升级前升级后操作系统CentOS…...
答题考试系统v1.6.1高级版源码分享+uniapp+搭建测试环境
一.系统介绍 一款基于FastAdminThinkPHPUniapp开发的小程序答题考试系统,支持多种试题类型、多种试题难度、练题、考试、补考模式,提供全部前后台无加密源代码,支持私有化部署 二.测试环境 系统环境:CentOS、 运行环境&#x…...
【Lua热更新】下篇 -- 更新中
上篇链接:【Lua热更新】上篇 文章目录 三、xLua热更新📖1.概述📚︎2.导入xLua框架🔖3. C#调用Lua3.1Lua解析器3.2Lua文件夹的重定向3.3Lua解析器管理器3.4全局变量获取3.5全局函数获取3.6映射到List和Dictionary3.7映射到类3.8映…...
射频测试入门学习(三)——程控仪器是怎样和电脑连接通信的
目录 一、程控仪器需要哪些条件 二、可程控仪器 三、专业的仪器通信软件、驱动 四、编程语言 五、电脑控制仪器条件汇总 六、仪器指令查询 七、结语 一、程控仪器需要哪些条件 1、需要具备硬件条件(可程控的仪器、个人计算机(PC)) 2、专业的仪器通信软件、驱动 3、…...
并发控制之Semaphore
Semaphore 作用 信号量,用于控制同时访问特定资源的线程数量,通过协调各个线程,以确保对共享资源的访问不会导致冲突或数据不一致等问题,有点类似令牌桶,内部维护一组许可证, acquire获取许可证…...
第R3周:RNN-心脏病预测
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 🍺要求: 1 本地读取并加载数据。 2 了解循环神经网络(RNN)的构建过程 3 测试集accuracy到达87% 🍻拔…...
【数值特性库】入口文件
数值特性库入口文件为lib.rs。该文件定义一系列数字特性的trait(特征),这些特性可以被不同的数字类型实现,从而提供一套通用的数值操作方法。下面是对代码中关键部分的解释: 一、基础设置 #