我正在尝试用Android的一个分析器工具来调试我的应用程序。
我正试图准确地找到我的CameraActivity的主线程位于跟踪文件中的位置。
为了将跟踪作为一个网页打开,我使用perfetto。请看附图。

我看到我可以缩小到我的包裹。不过,我正在试图找到实际的主线程。特别是它可能导致内存泄漏的Handler。
为了获得进程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字符串: Threadmain,5,main
据我所理解,基于我的日志输出的信任,数字:20815-20815表示我需要的进程和Id。但是,我无法通过perfetto显示找到它们。此外,根据上面的Log.d调用,主线程有一个id = 2。
在软件工程中必须有一个公共号码分配给应用程序的主线程的。最常用的数字是什么?
我如何理解我的应用程序线程上的这些进程Id?
发布于 2021-03-17 23:01:29
在Linux (当然还有Android)上,主线程ID与进程id (PID)相同。在您的示例中,20815既是应用程序的pid,也是主线程ID。
我不知道您的yes对象是如何实例化的,但是它看起来像一个Handler,它与Looper相关联并运行在Looper的线程上,与主线程不同。
顺便说一句,您的屏幕截图显示了系统跟踪的旧UI。如果您在新的跟踪查看器中打开它或将它导入到Android Studio分析器中,您应该能够更清楚地看到线程If。
https://stackoverflow.com/questions/66605962
复制相似问题