我的应用程序使用后台线程来初始化主线程加载英雄活动所需的一些内容。它有很多用于同步的锁。我正在寻找一种快速的方法来绘制可能的堆栈痕迹,在那里主线程在应用程序启动期间等待后台线程持有的锁。我检查了Thread Status Monitor. How do I debug this? What's causing it?,但这里讨论的是点对点线程状态,因为我正在寻找在启动期间发生的所有这样的事件,而不知道这些事件发生在哪里。
我确实看到,这些信息可以通过手动检查启动android配置文件跟踪和查看各种线程堆栈来找到这些出现的情况,但有很多数据需要检查。如果这个工具能显示主线程等待其他线程持有锁的次数,总时间以及持有这些锁的位置,那就太好了。
Q1)我们知道Android profiler是否可以显示这一点吗?我查看了https://developer.android.com/studio/profile/cpu-profiler,但找不到。
Q2)如果没有,有没有其他工具可以解析分析器导出的跟踪并打印此信息?
Q3)如果没有,您对如何读取导出的跟踪文件有什么建议吗?它似乎是二进制的。我正在通过https://github.com/JetBrains/android来解决这个问题。它现在似乎正在使用perfetto,但我还不能编写任何实用程序来读取该数据。
更新:我发现CPU概要分析/Systrace选项显示我的主线程确实保持空闲或等待某些资源,但是它没有关于它等待什么或在空闲一段时间后运行什么方法的信息。有什么关于如何结合java方法跟踪和sys跟踪视图的建议吗?

发布于 2021-08-11 15:57:09
https://stackoverflow.com/questions/68616590
复制相似问题