了解 Android 应用程序的 .trace 文件

Understanding .trace file of an Android application

我的应用程序给出 ANR 弹出窗口。要找出我使用此行生成 sample.trace 文件的原因:

Debug.startMethodTracing("sample");

在我的 activity 的 onCreate 方法中,我添加了这一行以停止跟踪 activity 的 onDestroy 方法:

Debug.stopMethodTracing();

我在销毁 activity 后得到了 sample.trace 文件。但是当我查看文件时,我不明白。据我所知,有一个在线工具 Perfetto.

然而,当我打开其中的文件时,它显示空白页,而我期待一些 UI。

因此我需要了解该文件并找出导致 ANR 问题的问题,但我不知道该怎么做。

这是我的 sample.trace 文件的一部分:

*version
3
data-file-overflow=true
clock=dual
elapsed-time-usec=165959496
num-method-calls=599184
clock-call-overhead-nsec=3338
vm=art
pid=13695
*threads
14436   RxIoScheduler-2
14460   Okio Watchdog
14589   AsyncTask #5
14612   Timer-0
15013   AsyncTask #6
15014   AsyncTask #7
15015   AsyncTask #8
15049   Timer-4
13695   main
13718   Jit thread pool worker thread 0
13724   Signal Catcher
13726   ADB-JDWP Connection Control Thread
13728   FinalizerDaemon
13729   FinalizerWatchdogDaemon
13727   ReferenceQueueDaemon
13730   HeapTaskDaemon
13732   Binder:13695_1
13733   Binder:13695_2
13736   Binder:13695_3
13895   Profile Saver
13909   Queue
13910   Queue
13911   Queue
13912   Queue
13913   Queue
13914   Queue
13916   Queue
13917   Queue
13915   Queue
13936   Answers Events Handler1
13937   queued-work-looper
13941   Crashlytics Exception Handler1
13950   StethoListener-main
13970   OkHttp ConnectionPool
13977   Binder:13695_4
13978   process reaper
13980   process reaper
14016   RenderThread
14023   Binder:13695_5
14026   Binder:13695_6
14021   Thread-16
14152   Thread-17
14153   Thread-18
14156   Studio:InputCon
14165   magnifier pixel copy result handler
14151   Thread-19
14435   RxIoScheduler-1 (Evictor)
14459   OkHttp ConnectionPool
14476   RealmFinalizingDaemon
14480   pool-3-thread-1
14481   pool-3-thread-2
14482   pool-3-thread-3
14483   pool-3-thread-4
14484   pool-3-thread-5
14487   pool-3-thread-6
14489   pool-3-thread-7
14490   pool-3-thread-8
14491   pool-3-thread-9
14602   glide-disk-cache-thread-0
14604   glide-source-thread-0
14614   Timer-1
14615   IntentService[]
14628   glide-source-thread-1
14630   OkHttp ConnectionPool
14633   glide-active-resources
14780   pool-3-thread-10
14788   Picasso-Stats
14789   Picasso-Dispatcher
14790   Picasso-refQueue
14805   Timer-3
14973   SpotScheduleThread
14974   PlaylistScheduleThread
14980   pool-3-thread-11
15000   pool-3-thread-12
15021   RxComputationScheduler-1
15025   RxComputationScheduler-2
15028   OkHttp ConnectionPool
15050   Timer-5
15052   pool-3-thread-13
15053   pool-3-thread-14
15767   pool-3-thread-15
15771   pool-3-thread-16
15772   pool-3-thread-17
*methods
0x18c8  java.lang.BootClassLoader   getInstance ()Ljava/lang/BootClassLoader;   ClassLoader.java
0x6ba0  java.lang.BootClassLoader   findClass   (Ljava/lang/String;)Ljava/lang/Class;   ClassLoader.java
0x6b9c  java.lang.BootClassLoader   loadClass   (Ljava/lang/String;Z)Ljava/lang/Class;  ClassLoader.java
0x7878  java.lang.ClassLoader   <init>  (Ljava/lang/ClassLoader;)V  ClassLoader.java
0x7880  java.lang.ClassLoader   <init>  (Ljava/lang/Void;Ljava/lang/ClassLoader;)V  ClassLoader.java

提前致谢。

据我所知,我可以使用 Android Studio 查看哪个进程在 cpu 等

我唯一需要做的就是打开 Profiler window,然后单击 + 按钮并从文件加载。然后它会显示 .trace 文件的统计数据。

谢谢!