android 性能优化 -systrace
简介:
Systrace允许监视和跟踪Android系统的行为(trace)。它会指明系统都在哪些工作上花费时间、CPU周期都用在哪里,甚至可以看到每个线程、进程在指定时间内都在干嘛。它同时还会突出观测到的问题,从垃圾回收到渲染内容都可能是问题对象,甚至提供建议的解决方案。但是不能确定具体有问题的代码在哪里,这里可用traceview工具。
使用:
我们来看看如何导出trace以及使用它来优化UI,打开Android Studio,启动Android Device Monitor。

说明1:trace输出的文件路径;
说明2:配置抓取Systrace的时间,通常设置5秒,并在5秒内重现问题,时间太短会导致问题重现时没有被抓到,时间太长会导致JavaHeap不够而无法保存,因此在能抓到问题点的情况下,时间越小越好;
说明3:Buffer Size是存储Systrace的size,同样的,太小会导致信息丢失,时间太长会导致Java Heap不够而无法保存,建议20480KB;
说明4:如果用户有自己在应用程序中加入自己的Systrace log,如下:
Trace.beginSection(“newInstance”);
Trace.endSection( );
那么此处必须选择这个应用对应的进程名字,否则新加的Systrace log不会被抓到。
说明5:这部分TAG全部勾选。说明6:针对UI相关的性能问题,以下TAG必须勾选:——Bionic C Library——CPU Frequency——CPU Idle——CPU Load如果设备可以root,root后可以看到更多的TAG,root后请勾选:——eMMC commands——Synchonization——Kernel Workqueues
设置完成后点击“OK"开始抓取systrace,请在此时重现性能问题,设置的时间到后,trace.html文件会被自动保存下来。用Chrome浏览器打开此文件。如果生成的trace文件无法直接打开,请在地址栏输入chrome://tracing/,然后选择load按钮,把生成的html文件load进来(不要直接open)。

Trace报告的X轴表示时间,Y轴以进程进行分组,进程组内是各个线程。每个应用进程包含每个线程所包含的所有跟踪标记,包括基于启用跟踪类别的高级跟踪事件的层次结构。
除了进程和线程运行信息,还有两个重要信息:
- Frame:
在每个App进程,都有一个Frames行,正常情况以绿色的圆点表示。当圆点颜色为黄色或者红色时,意味着这一帧超过16.6ms(即发现丢帧),这时需要通过放大那一帧进一步分析问题。对于Android 5.0(API level 21)或者更高的设备,该问题主要聚焦在UI Thread和Render Thread这两个线程当中。对于更早的版本,则所有工作在UI Thread。
- Alerts:
Systrace能自动分析trace中的事件,并能自动高亮性能问题作为一个Alerts,建议调试人员下一步该怎么做。比如对于丢帧时,点击黄色或红色的Frames圆点便会有相关的提示信息;另外,在systrace的最右侧,有一个Alerts tab可以展开,这里记录着所有的的警告提示信息。当我们点击了Alerts或者点击右边的Alerts列表中的任何一点我们可以看到在界面的最底部会相对应的优化提示以及可能会出现优化的视频教程链接。

Trace报告可以进行一些简单的交互,比如放大、缩小、平移和拖动等。下表列出了几个常用的快捷键:
| 导航操作 | 作用 |
|---|---|
| w | 放大 [+shift]速度更快 |
| s | 缩小 [+shift]速度更快 |
| a | 左移 [+shift]速度更快 |
| d | 右移 [+shift]速度更快 |
| 常用操作 | 作用 |
|---|---|
| f | 放大当前选定区域 |
| v | 高亮VSync |
| m | 标记当前选定区域 |
| 0 | 恢复trace到初始态 |
| g | 切换是否显示60hz的网格线 |
| 一般操作 | 作用 |
|---|---|
| h | 切换是否显示详情 |
| / | 搜索关键字 |
| enter | 显示搜索结果,可通过← →定位搜索结果 |
| ` | 显示/隐藏脚本控制台 |
| ? | 显示帮助功能 |
通过在View Options框中输入以下name,辅助m按键,我们可以快速定位到各事件发生时间与时长等信息。
| 名称 | 含义 |
|---|---|
| AppLaunch_dispatchPtr:Up | 点击桌面icon离开 |
| PostFork | Zoygate fork一个子进程 |
| ActivityThreadMain | Activity主线程入口 |
| RuntimeInit | 准备虚拟机资源 |
| bindApplication | 建立AMS与应用的binder通信,可以看到执行了很多子方法,包括打开应用的odex,资源等 |
| activityStart | handleLauncherActivity的时间,但这时界面还是不可见的 |

我们看到了“Wall duration”,代表着这一区块的开始到结束的耗时。之所以叫作“Wall duration”,是因为它就像是墙上的一个时钟,从线程的一开始就计时。但是,CPU Duration一项中显示了实际CPU在处理这一区块所消耗的时间。
android 性能优化 -systrace的更多相关文章
- 【腾讯Bugly干货分享】Android性能优化典范——第6季
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/580d91208d80e49771f0a07c 导语 这里是Android性能优 ...
- Android性能优化典范(二)
Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitmap的 ...
- android app性能优化大汇总(google官方Android性能优化典范 - 第2季)
Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitmap的 ...
- Android性能优化典范 - 第2季
Google发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitmap的缩放,缓 ...
- Android 性能优化之工具和优化点总结
Android性能优化学习 最近公司主抓性能优化工作,借此春风也学习到了许多Android性能优化方面的知识.由于组内队友的给力,优化的成果也是比较喜人.同时也学习和实践了不少知识,特此记录. 1.性 ...
- Android性能优化:布局优化 详细解析(含<include>、<ViewStub>、<merge>讲解 )
1. 影响的性能 布局性能的好坏 主要影响 :Android应用中的页面显示速度 2. 如何影响性能 布局影响Android性能的实质:页面的测量 & 绘制时间 1个页面通过递归 完成测量 & ...
- Android 性能优化探究
使用ViewStub动态载入布局.避免一些不常常的视图长期握住引用: ViewStub的一些特点: 1. ViewStub仅仅能Inflate一次,之后ViewStub对象被置空:某个被ViewStu ...
- Android 性能优化---布局优化
Android 性能优化---布局优化 Android 布局绘制原理 布局加载过程 setContentView() --> inflate() -- > getLayout()(I/O操 ...
- 我把阿里、腾讯、字节跳动、美团等Android性能优化实战整合成了一个PDF文档
安卓开发大军浩浩荡荡,经过近十年的发展,Android技术优化日异月新,如今Android 11.0 已经发布,Android系统性能也已经非常流畅,可以在体验上完全媲美iOS. 但是,到了各大厂商手 ...
- android 性能优化
本章介绍android高级开发中,对于性能方面的处理.主要包括电量,视图,内存三个性能方面的知识点. 1.视图性能 (1)Overdraw简介 Overdraw就是过度绘制,是指在一帧的时间内(16. ...
随机推荐
- stream的优化:java封装的拆箱与装箱的弊端
authors.stream() .map(author->author.getAge) .map(age->age+10)//Stream<Integer> .filter( ...
- Jmeter函数助手18-machineIP
machineIP函数用于获取本地IP地址. 存储结果的变量名(可选) 1.本地ip可以在cmd运行界面输入命令"ipconfig"查看,Jmeter则使用函数获取${__mach ...
- 【Spring】06 Aop切面功能
什么是Aop? Aspect Oriented Programming 面向切面编程 通过预编译的方式和运行期动态代理实现程序功能统一维护的一种技术 是OOP的延续,也是Spring第二个核心内容 可 ...
- 【Android】虚拟设备运行BUG
虚拟设备是AndroidStudio提供的一个真机模拟运行环境 跑这个虚拟设备要下载手机系统镜像才能跑起来 然后项目中勾选这个虚拟设备,怎么设置就不赘述了 问题奇怪的是运行环境有了,App应用程序也能 ...
- 【Hibernate】Re02 官网介绍
介绍: 创始人:Gavin King.EJB3.0专家,JBoss核心成员之一,<Hibernate In Action>作者 Hibernate是ORM的解决方案. 优点: 1.功能强大 ...
- 外形最漂亮的人形机器人——通用机器人Apollo,设计为可以在任何任务和环境中与人类进行协作
视频地址: https://www.bilibili.com/video/BV11F4m1M7ph/
- 国产操作系统 “银河麒麟操作系统V10” 试用失败历程
面对外国的科技封锁,具有自主产权的国产软件已经变得迫在眉睫了,几天前在新闻上看到国产的操作"银河麒麟操作系统V10"已经发布,于是抱着尝鲜的心态想着去试着用用.虽然都是基于linu ...
- 【转载】 Integrating New Games into Retro Gym
https://medium.com/aureliantactics/integrating-new-games-into-retro-gym-12b237d3ed75 OpenAI's retro ...
- 从数据到洞察:DataOps加速AI模型开发的秘密实践大公开!
作者 | 代立冬,白鲸开源科技联合创始人&CTO 引言 在AI驱动的商业世界中,DataOps作为连接数据与洞察的桥梁,正迅速成为企业数据战略的核心. 在WOT全球技术创新大会2024·北京站 ...
- 【CDQ分治】三元环
三元环 HDU - 7439 思路 考虑 \(3\) 个点的有向图,要么成环,要么有一个点入度为 \(2\) ,假设第 个点的入度为 \(d_i\),答案为 \(C_n^3-\sum\limits_{ ...