Android Traceview 定位卡顿问题

Traceview 是一个 Android 性能分析工具,用于时间性能分析,主要帮助开发者了解应用程序中各个方法的执行时间和调用关系。通过图形化界面查看应用程序的代码执行细节,包括每个方法的调用次数、方法调用的时间消耗、方法调用堆栈等信息。我们可以通过它来定位性能瓶颈、不必要的函数调用,优化代码结构以及性能。


使用 Traceview 工具需要在代码中插入开始和结束追踪的方法:

Debug.startMethodTracing():开启监控

Debug.stopMethodTracing():停止监控

记录完成后,会生成一个.trace 文件,路径默认是/sdcard/Android/data/包名/files/dmtrace.trace

可以用 Android Studio 内置的 Profiler 工具来查看这个文件的可视化报告。


举个例子,在 MainActivity 中搞一个耗时操作:

class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)findViewById<Button>(R.id.btn).setOnClickListener {Debug.startMethodTracing() // 开启监控longTimeOperation()Debug.stopMethodTracing()  // 关闭监控,生成 .trace 文件}}private fun longTimeOperation() {for (i in 0..10000) {Log.i("wk", "循环:$i")}Log.i("wk", "完成")}
}

点击 btn 后,首先开启监控,执行耗时操作后关闭监控,就会在默认的路径下生成 .trace 文件,把它保存在电脑本地(右键 -> Save As...) 

然后把这个 trace 文件直接拖进 Android Studio,它会自动使用 Profiler 打开:

在实际项目开发当中,会有比较多的线程,这里选择主线程(main)和火焰图(Flame Chart)查看主线程调用的代码执行细节:

 从火焰图中就可以得知:com.demo.traceview.MainActivity.longTimeOperation 这个方法比较耗时,我们就可以按照这个路径跟踪到方法里面去进行优化(比如放子线程等)


除了使用代码生成 trace,还可以使用 Profiler 生成:

在 Profiler 中选择好要监控的进程后,点击 CPU 模块

选择 Java/Kotlin Method Trace 后点击 Record 开始监控,手动进行耗时操作后点击 Stop 停止监控,它就会自动生成 trace 文件并打开,页面和步骤就跟上面的一样了


需要注意的是,因为 Traceview 会在运行时植入额外的检测代码,所以它会对应用程序的性能造成一定影响,所以一般不在生产环境中使用,只在开发阶段作为性能调试使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/412621.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是CPU异常和中断?

什么是CPU异常和中断&#xff1f; 当你的电脑正在运行一个程序&#xff0c;突然你按下了键盘上的某个键&#xff0c;或者进行的加法运算结果溢出了&#xff0c;这时&#xff0c;CPU需要暂停正在做的事情&#xff0c;先去处理这个突然出现的事件。这些情况就是本文要谈的主题&a…

苹果笔记本 macbook 在 office word 中使用 mathtype 的方法

前言 想在 MacBook 中使用 mathtype&#xff0c;去搜索&#xff0c;去 Apple Store 下载也发现没有 解决方法 打开 office Word 的「插入」中的「获取加载项」、「我的加载项」。 在应用商店中下载&#xff0c;需要登录自己的微软账号。 加载成功后就可以使用了。 注意 和…

Linux学习记录——사십삼 高级IO(4)--- Epoll型服务器(1)

文章目录 1、理解Epoll和对应接口2、简单实现 1、理解Epoll和对应接口 poll依然需要OS去遍历所有fd。一个进程去多个特定的文件中等待&#xff0c;只要有一个就绪&#xff0c;就使用select/poll系统调用&#xff0c;让操作系统把所有文件遍历一遍&#xff0c;哪些就绪就加上哪…

关键信息基础设施安全相关材料汇总

文章目录 前言一、法律(1)《中华人民共和国国家安全法》(2)《中华人民共和国网络安全法》(3) 《中华人民共和国密码法》(4)《中华人民共和国数据安全法》(5) 《中华人民共和国个人信息保护法》二、行政法规(6)《中华人民共和国保守国家秘密法实施条例》(7) 《关键信息基础设施安…

圈小猫游戏HTML源码

源码介绍 圈小猫游戏html源码&#xff0c;HTMLCSSJS,记事本可以打开修改内容&#xff0c;电脑本地双击index.html即可运行&#xff0c;也可以上传到服务器上面运行&#xff0c;喜欢的同学可以拿去使用 下载地址 蓝奏云&#xff1a;https://wfr.lanzout.com/iFkVc1lb5akj CS…

IP定位助力网络安全防线

随着互联网技术的飞速发展&#xff0c;网络安全问题日益凸显。在网络安全领域&#xff0c;IP地址定位技术正发挥着越来越重要的作用&#xff0c;成为维护网络安全的一道有力防线。 一、追踪黑客攻击者&#xff0c;维护公共安全 在网络安全领域&#xff0c;黑客攻击是一个严重的…

unocss+iconify技术在vue项目中使用20000+的图标

安装依赖 npm i unocss iconify/json配置依赖 vue.config.js文件 uno.config.js文件 main.js文件 使用 <i class"i-fa:user"></i> <i class"i-fa:key"></i>class名是 i- 开头&#xff0c;跟库名:图标名&#xff0c;那都有什么库…

LRU Cache

文章目录 1. 什么是LRU Cache2. LRU Cache的实现3. LRU Cache的OJ题目分析AC代码 1. 什么是LRU Cache LRU是Least Recently Used的缩写&#xff0c;意思是最近最少使用&#xff0c;它是一种Cache替换算法。 什么是Cache&#xff1f; 狭义的Cache指的是位于CPU和主存间的快速RAM…

Mybatis之关联

一、一对多关联 eg&#xff1a;一个用户对应多个订单 建表语句 CREATE TABLE t_customer (customer_id INT NOT NULL AUTO_INCREMENT, customer_name CHAR(100), PRIMARY KEY (customer_id) ); CREATE TABLE t_order ( order_id INT NOT NULL AUTO_INCREMENT, order_name C…

burp靶场--ssrf

burp靶场–ssrf 1.什么是ssrf 服务器端请求伪造是一种 Web 安全漏洞&#xff0c;允许攻击者导致服务器端应用程序向非预期位置发出请求。 在典型的 SSRF 攻击中&#xff0c;攻击者可能会导致服务器连接到组织基础设施内的仅供内部使用的服务。在其他情况下&#xff0c;他们可…

LeetCode 104. 二叉树的最大深度

104. 二叉树的最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1…

SpringBoot中整合MybatisPlus快速实现Mysql增删改查和条件构造器

场景 Mybatis-Plus(简称MP)是一个Mybatis的增强工具&#xff0c;只是在Mybatis的基础上做了增强却不做改变&#xff0c;MyBatis-Plus支持所有Mybatis原生的特性&#xff0c; 所以引入Mybatis-Plus不会对现有的Mybatis构架产生任何影响。MyBatis 增强工具包&#xff0c;简化 C…