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. ...
随机推荐
- XXL-JOB初见
XXL-JOB是轻量级分布式任务调度平台 port:8088 初始账号:admin/123456 主要有调度中心.执行器.任务 执行流程: 1.执行器向调度中心上报任务 2.调度中心为执行器分配任务 ...
- redis实现分片集群
为什么要使用分片集群? 主从和哨兵可以解决高可用.高并发读的问题.但是仍存在海量数据存储.高并发写问题 分片集群特征: 集群中有多个master,每个master保存不同数据. 为master置备了后 ...
- Python学习的个人笔记
python基础知识 目录: Python基础语法: (1)打印出hello world (2)注释 (3)数据类型 (4)运算 (5)输入 (6)输出 (7)序列 (8)相等比较 (9)选择 (10 ...
- 如何在Linux云服务器上通过Docker Compose部署安装Halo,搭建个人博客网站?
目录 前置步骤 环境搭建 创建容器组 在系统任意位置创建一个文件夹 创建docker-compose.yaml 启动 Halo 服务 配置反向代理以及域名解析 Halo初始化页面. 更新新版本的hal ...
- SemanticKernel/C#:使用Ollama中的对话模型与嵌入模型用于本地离线场景
前言 上一篇文章介绍了使用SemanticKernel/C#的RAG简易实践,在上篇文章中我使用的是兼容OpenAI格式的在线API,但实际上会有很多本地离线的场景.今天跟大家介绍一下在Semanti ...
- 【Tutorial C】08 函数 Function
函数的定义 C源程序是由函数组成的. 最简单的程序有一个主函数 main(),但实用程序往往由多个函数组成, 由主函数调用其他函数,其他函数也可以互相调用. 函数是C源程序的基本模块,程序的许多功能是 ...
- 【VMware】虚拟机 VMware WorkStation Pro 下载安装(Windows)
官网地址: 下载地址:[VMware WorkStation Pro 15.5 For Windows] https://www.vmware.com/cn/products/workstation- ...
- 《Python数据可视化之matplotlib实践》 源码 第二篇 精进 第七章
图 7.1 import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np mpl.rcParams[& ...
- 如何安装废弃版本的Jax —— pypi服务器上不保存的python包应该如何安装
python的公开扩展包的存储是在网站: http://pypi.org/ 一般情况下,这是没有问题的,但是对于一些更新版本比较多的扩展包就出现了问题,因为pypi的服务器对每个项目(扩展包)都是由存 ...
- 横扫鸿蒙弹窗乱象,SmartDialog出世
前言 但凡用过鸿蒙原生弹窗的小伙伴,就能体会到它们是有多么的难用和奇葩,什么AlertDialog,CustomDialog,SubWindow,bindXxx,只要大家用心去体验,就能发现他们有很多 ...