一个Android程序多少个线程,Android一个"Hello world" APP里面有多少个线程

本文详细介绍了如何通过logcat查看Android应用的进程PID,然后使用adb shell命令解析进程内部的线程信息,对比Activity和服务所在的进程线程差异,重点关注RenderThread、JIT线程池、信号捕获、引用队列、析构线程等关键线程的作用和功能。
摘要由CSDN通过智能技术生成

1 查看Activity所在进程

从logcat可以直接看到PID(Process ID)

然后利用adb shell ps 查看进程内部的线程

-T 显示所有线程

adb shell ps -T -p 10724

USER PID TID PPID VSZ RSS WCHAN ADDR S CMD

u0_a239 7532 7532 633 4468008 123960 0 0 S tudyproject.app(main)

u0_a239 7532 7547 633 4468008 123960 0 0 S Binder:7532_1 (ApplicatoinThread)

u0_a239 7532 7548 633 4468008 123960 0 0 S Binder:7532_2 (ViewRoot.W)

u0_a239 7532 7549 633 4468008 123960 0 0 S Binder:7532_3 (Dont know now)

------------------below is the JVM(ART or Davlik) Thread -----------------------------

u0_a239 7532 7554 633 4468008 123960 0 0 S RenderThread (Surface thread)

u0_a239 7532 7538 633 4468008 123960 0 0 S Jit thread pool(JIT)

u0_a239 7532 7540 633 4468008 123960 0 0 S Signal Catcher(Linux Signal Recevier Thread)

u0_a239 7532 7541 633 4468008 123960 0 0 S ADB-JDWP Connected (DDMS 链接线程)

u0_a239 7532 7542 633 4468008 123960 0 0 S ReferenceQueueDaemon (引用队列Dameon 查看Daemons.java)

u0_a239 7532 7543 633 4468008 123960 0 0 S FinalizerDaemon (析构守护线程 调用对象finalizer())

u0_a239 7532 7544 633 4468008 123960 0 0 S FinalizerWatchdogDaemon (析构监控守护线程)

u0_a239 7532 7545 633 4468008 123960 0 0 S HeapTaskDaemon(堆剪裁守护线程)

u0_a239 7532 7550 633 4468008 123960 0 0 S Profile Saver (Profile Thread)

u0_a239 7532 7553 633 4468008 123960 0 0 S Binder:intercept (Dont know now)

u0_a239 7532 7656 633 4468008 123960 0 0 S queued-work-loop (Dont know now)

2 查看Service所在进程

与Activity相比 显然少了Render Thread。

USER PID TID PPID VSZ RSS WCHAN ADDR S CMD

u0_a239 10748 10748 633 4451584 98400 0 0 S ject.app:remote

u0_a239 10748 10754 633 4451584 98400 0 0 S Jit thread pool

u0_a239 10748 10755 633 4451584 98400 0 0 S Signal Catcher

u0_a239 10748 10756 633 4451584 98400 0 0 S ADB-JDWP Connec

u0_a239 10748 10757 633 4451584 98400 0 0 S ReferenceQueueD

u0_a239 10748 10758 633 4451584 98400 0 0 S FinalizerDaemon

u0_a239 10748 10759 633 4451584 98400 0 0 S FinalizerWatchd

u0_a239 10748 10760 633 4451584 98400 0 0 S HeapTaskDaemon

u0_a239 10748 10761 633 4451584 98400 0 0 S Binder:10748_1

u0_a239 10748 10762 633 4451584 98400 0 0 S Binder:10748_2

u0_a239 10748 10763 633 4451584 98400 0 0 S Binder:10748_3

u0_a239 10748 10766 633 4451584 98400 0 0 S Profile Saver

ReferenceQueueDaemon:引用队列守护线程。我们知道,在创建引用对象的时候,可以关联一个队列。当被引用对象引用的对象被GC回收的时候,被引用对象就会被加入到其创建时关联的队列去。这个加入队列的操作就是由ReferenceQueueDaemon守护线程来完成的。这样应用程序就可以知道哪些被引用对象引用的对象已经被回收了。

FinalizerDaemon:析构守护线程。对于重写了成员函数finalize的对象,它们被GC决定回收时,并没有马上被回收,而是被放入到一个队列中,等待FinalizerDaemon守护线程去调用它们的成员函数finalize,然后再被回收。

FinalizerWatchdogDaemon:析构监护守护线程。用来监控FinalizerDaemon线程的执行。一旦检测那些重定了成员函数finalize的对象在执行成员函数finalize时超出一定的时候,那么就会退出VM。

HeapTaskDaemon:堆裁剪守护线程。用来执行裁剪堆的操作,也就是用来将那些空闲的堆内存归还给系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值