Android 查看app当前运行的线程 - 程序员阿鑫-带你一起秃头!

Android 查看app当前运行的线程

作者: 程序员阿鑫

好兄弟,我们一起掉头发!

手机扫码查看

标签:

学习Android

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

背景

如何查看当前进程的线程数量。 比如一个app发现ui线程的调度一直在Runnable(待调度执行)中,而不是出于Running,那么就要看这个时候CPU的每个核心在跑什么,频率怎么样。 比如频率很高,每个核心吃满了,但是ui线程依然Runnable,那么就得看其他线程在干嘛了。

adb shell
ps -A
//查看全部进程

拿到pid之后

ursa:/ $ ps -T -A | grep 26644
u0_a184      26644 26644   672 5311996 139720 0                   0 S module_logutils
u0_a184      26644 26650   672 5311996 139720 0                   0 S Jit thread pool
u0_a184      26644 26655   672 5311996 139720 0                   0 S Signal Catcher
u0_a184      26644 26661   672 5311996 139720 0                   0 S ADB-JDWP Connec
u0_a184      26644 26663   672 5311996 139720 0                   0 S HeapTaskDaemon
u0_a184      26644 26664   672 5311996 139720 0                   0 S ReferenceQueueD
u0_a184      26644 26665   672 5311996 139720 0                   0 S FinalizerDaemon
u0_a184      26644 26666   672 5311996 139720 0                   0 S FinalizerWatchd
u0_a184      26644 26667   672 5311996 139720 0                   0 S Binder:26644_1
u0_a184      26644 26668   672 5311996 139720 0                   0 S Binder:26644_2
u0_a184      26644 26680   672 5311996 139720 0                   0 S Binder:26644_3
u0_a184      26644 26693   672 5311996 139720 0                   0 S Profile Saver
u0_a184      26644 26695   672 5311996 139720 0                   0 S RenderThread
u0_a184      26644 26698   672 5311996 139720 0                   0 S Binder:intercep
u0_a184      26644 26699   672 5311996 139720 0                   0 S magnifier pixel
u0_a184      26644 26700   672 5311996 139720 0                   0 S chancesThread1
u0_a184      26644 26701   672 5311996 139720 0                   0 S pool-2-thread-1
u0_a184      26644 26704   672 5311996 139720 0                   0 S AsyncTask #1
u0_a184      26644 27040   672 5311996 139720 0                   0 S chancesThread2
ursa:/ $

如果想一直观察当前app的线程数量,可以通过脚本来做。 比如你已经知道进程的pid,还有他名字。

#!/bin/bash

for((i=1;i<=10000;i++));

do
##替换成需要做的动作
sleep 1 #睡眠一秒
adb shell ps -T | grep u0_a208 | wc -l
#我打印了命令,如果你不需要,可以忽略
#u0_a208 pid前面的user
echo 'adb shell ps -T | grep u0_a208 | wc -l'; 

done

这样就可以观察线程数目的变化了。比如你进入某个页面的时候,看看线程有没有变化。通过这样的简单观察,如果发现线程数目一直增加,那么就是有问题。长时间下去可能会oom。即使不oom也有可能产生卡顿或者ANR。因为线程越来越多,就意味着CPU到时候忙不过来,调度自然跟不上了。

还有一个方式是,打开as,打开profiler,点击CPU,进去之后也可以实时看到线程数目,CPU使用率,等等详细信息。

有个头疼的事情,我怎么知道这些线程是哪里创建的或者触发的,比如进入某个页面后,我怎么快速定位线程的创建和调用呢,找到线程的使用者呢。如果你知道,赶紧来评论区告诉我。

如果我有方法,我会补充这个文章。这一篇属于残次品。

分享到:
打赏
未经允许不得转载:

作者: 程序员阿鑫, 转载或复制请以 超链接形式 并注明出处 程序员阿鑫-带你一起秃头!
原文地址: 《Android 查看app当前运行的线程》 发布于2021-12-21

评论

切换注册

登录

忘记密码?

您也可以使用第三方帐号快捷登录

切换登录

注册

Android 查看app当前运行的线程

长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏