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

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

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

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

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

你可能感兴趣的:(Android一个"Hello world" APP里面有多少个线程)