统计
  • 建站日期:2019-12-01
  • 文章总数:2062 篇
  • 评论总数:2129 条
  • 分类总数:21 个
  • 最后更新:12月11日
文章 未分类

Android 查看app当前运行的线程

程序员阿鑫
首页 未分类 正文


Android查看app当前运行的线程
-程序员阿鑫-带你一起秃头
-第1
张图片

背景

如何查看当前进程的线程数量。 比如一个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使用率,等等详细信息。

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

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

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

-- 展开阅读全文 --
这篇文章最后更新于2021-12-21,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
vue使用WangEdit富文本
« 上一篇
速领!Steam27款劲爆游戏,无套路免费送!
下一篇 »

发表评论