Android计算应用/进程的线程数

Sag*_*r_R 4 multithreading android adb

我需要监视应用程序的行为并收集有关如何创建/销毁线程的统计信息.我知道DDMS有一个线程视图,可以实时显示这些信息,但是我可以通过命令行获得相同的信息吗?我想创建自己的工具,它将记录此信息及其过程.

澄清:我正在寻找的是一个可以通过ADB传递的命令,它将列出在进程下运行的线程.这样,我可以在不同的时间点运行命令,以获取一段时间内所有线程的状态(线程数及其名称).

Lit*_*ild 7

以我有限的知识,并且有可能我完全错了,请看一下:

public static Map<Thread,StackTraceElement[]> getAllStackTraces()    
Run Code Online (Sandbox Code Playgroud)

文档:http : //docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#getAllStackTraces()

返回所有活动线程的堆栈跟踪图。映射键是线程,每个映射值是一个 StackTraceElement 数组,表示相应线程的堆栈转储。返回的堆栈跟踪采用为 getStackTrace 方法指定的格式。调用此方法时,线程可能正在执行。每个线程的堆栈轨迹仅代表一个快照,每个堆栈轨迹可能在不同的时间获得。如果虚拟机没有关于线程的堆栈跟踪信息,则映射值中将返回一个长度为零的数组。

我希望这有帮助。


Sau*_*ram 7

有两种方法可以做到这一点.
在Ubuntu 12.10的摩托罗拉Moto G上试过这个

  1. 您可以使用(在ADB Shell下)列出设备上运行的所有线程top.

    $ top -t
    PID   TID PR CPU% S     VSS     RSS PCY UID      Thread          Proc
    271   895  1   0% S  11120K   1892K     root     netd            /system/bin/netd
    272   272  0   0% S   1040K    200K     root     debuggerd       /system/bin/debuggerd
    274   274  2   0% S  63256K   7008K  fg system   surfaceflinger  /system/bin/surfaceflinger
    274   451  0   0% S  63256K   7008K  fg system   Binder_1        /system/bin/surfaceflinger
    
    Run Code Online (Sandbox Code Playgroud)

    因此,要获取您可以使用的任何特定流程的详细信息grep

    $ top -t | grep com.whatsapp
    PID   TID   PR CPU% S     VSS     RSS PCY UID      Thread          Proc
    15210 15210  0   0% S 550076K  51180K  bg u0_a96   com.whatsapp    com.whatsapp
    15210 15214  0   0% S 550076K  51180K  bg u0_a96   GC              com.whatsapp
    15210 15215  0   0% S 550076K  51180K  bg u0_a96   Signal Catcher  com.whatsapp
    15210 15216  0   0% S 550076K  51180K  bg u0_a96   Compiler        com.whatsapp
    
    Run Code Online (Sandbox Code Playgroud)

    要在主机上运行它,只需使用

    $ adb shell top -t | grep com.whatsapp
    
    Run Code Online (Sandbox Code Playgroud)

    如果grep不支持,请使用Busybox.

  2. 如果您正在寻找静态视图.你也可以使用ps.

    $ ps -p 15210 -t                                         
    USER     PID   PPID  VSIZE  RSS   PRIO  NICE  RTPRI SCHED   WCHAN    PC         NAME
    u0_a96   15210 275   549036 52136 20    0     0     0     ffffffff 00000000 S com.whatsapp
    u0_a96   15214 15210 549036 52136 20    0     0     0     ffffffff 00000000 S GC
    u0_a96   15215 15210 549036 52136 20    0     0     0     ffffffff 00000000 S Signal Catcher
    u0_a96   15216 15210 549036 52136 20    0     0     0     ffffffff 00000000 S Compiler
    
    Run Code Online (Sandbox Code Playgroud)

    15210您的流程的PID 在哪里com.whatsapp

希望这能解决您的问题,让我知道它是否有效.