有时候程序运行出现死锁或者信号量卡死是很纠结的问题,单看代码很难分析定位问题,这时候可以借助DDMS来查看threads的运行情况,一目了然。
手机连接上USB,确保adb连通,然后启动Eclipse里的DDMS,这时候应该手机就正常连接上了
就如上图中显示的,只要连接上了就可以查看某个进程里的所有线程的活动了; 下面具体解释下Threads标签页里给出的每个字段的意思:
ID: 虚拟机分配的唯一线程ID. 在 Dalvik, 该数字是一个从3开始的奇数
Tid:线程 ID. 进程中主线程的ID, 会同进程的ID相匹配
Stauts:虚拟机线程状态. 守护进程会附带一个’*’. 状态信息列表如下
running – executing application code – 正在执行应用程序
sleeping – called Thread.sleep() – 执行了Thread.sleep() 方法
monitor – waiting to acquire a monitor lock – 在正等待获取一个监听锁
wait – in Object.wait() – 在Object.wait() 方法中
native – executing native code – 执行了原生代码
vmwait – waiting on a VM resource – 正在等待一个虚拟机资源
zombie – thread is in the process of dying – 该线程已死
init – thread is initializing (you shouldn’t see this) – 线程正在初始化 (你不会看到这个)
starting – thread is about to start (you shouldn’t see this either) – 线程正在启动中 (这个你也不会看到)
utime:执行用户代码的累计时间, 单位为”jiffies(表示系统启动以来的tick数)” (通常是 10ms). 仅在Linux系统中适用
stime:执行系统代码的累计时间, 单位为”jiffies(表示系统启动以来的tick数)”.
name:线程的名字
“ID” 和 “Name” 在进程启动的时候就会显示. 其余的字段每个一段时间更新一次(默认是4秒钟)