0

我正在尝试使用 Android Studio 的探查器工具之一调试我的应用程序。

我试图准确地找到我的 CameraActivity 的主线程在跟踪文件中的位置。

我正在使用 perfetto UI 以将跟踪作为网页打开。请看附图在此处输入图像描述

我看到我可以缩小到我的包裹。但是我试图找到实际的主线程。特别是它可能导致内存泄漏的处理程序。

为了得到进程Id和线程Id,我把这个Log.d调用放在了Handler的handleMessage方法里面。

Log.d("iinnside_","see: " + yes.getLooper().getThread().getId() + " string: "+
                    yes.getLooper().getThread().toString());

这个 Log.d 调用给了我结果:

20815-20815 D/iinnside_:参见:2 字符串:Thread[main,5,main]

根据我对日志输出配置的理解,数字:20815-20815 代表我需要的进程和 ID。但是我无法通过 perfetto UI 显示找到它们。此外,根据上面的 Log.d 调用,主线程的 id = 2。

在软件工程中,必须为应用程序的主线程分配一个公共编号。最常用的数字是什么?

如何理解我的应用程序线程上的这些进程 ID?

4

1 回答 1

0

在 Linux(当然还有 Android)上,主线程 ID 与进程 ID (PID) 相同。在您的示例中, 20815 是应用程序的 pid 和主线程 ID。

我不知道你的yes对象是如何实例化的,但它看起来像 a Handler,它与 a 相关联Looper并在 thatLooper的线程上运行,与主线程不同。碰巧线程的id = 2。

顺便说一句,您的屏幕截图显示了系统跟踪的旧 UI。如果您在新的 Perfetto跟踪查看器中打开它或将其导入Android Studio 分析器,您应该能够更清楚地看到线程 ID。

于 2021-03-17T23:01:29.683 回答