Android 线程梳理
Android 进程梳理
APP 进程的线程
- Heap thread poo 异步的HeapWorker, 包含5个
- Signal Catcher 捕捉Kernel信号,比如SIGNAL_QUIT
- JDWP 虚拟机调试的线程
- ReferenceQueueD 用于GC
- FinalizerDaemon 用于GC
- FinalizerWatchd 用于GC
- HeapTrimmerDaem 用于GC
- GCDaemon 用于GC
- Binder_1 用于IPC
- Binder_2 用于IPC
- pool-m-thread-n 线程池m中的第n个线程,包含若干个
- AsyncTask #1 异步任务
- RenderThread 渲染线程
- WifiManager 管理wifi的线程
SystemServer 进程的线程
Input
- 是 SystemServer 线程里面非常重要的一部分,主要是由 InputReader 和 InputDispatcher 这两个 Native 线程组成
窗口动画
- 由于窗口归 SystemServer 来管,那么窗口动画也就是由 SystemServer 来进行统一的处理,其中涉及到两个比较重要的线程,Android.Anim 和 Android.Anim.if 这两个线程
- Android P 里面,应用的启动动画由 Launcher 和应用自己的第一帧组成,之前是在 SystemServer 里面的,现在多任务的动画为了性能部分移到了 Launcher 去实现
ServiceThread:ServiceThread 继承自 HandlerThread ,下面介绍的几个工作线程都是继承自 ServiceThread。每个 Thread 都有自己的 Looper 、Thread 和 MessageQueue,互相不会影响。
- UiThread
- IoThread
- DisplayThread
- AnimationThread:名字叫 android.anim。WindowAnimator 的动画执行也是在 AnimationThread 线程中的,Android P 增加了一个 SurfaceAnimationThread 来分担 AnimationThread 的部分工作,来提高 WindowAnimation 的动画性能
- SurfaceAnimationThread:名字叫 android.anim.lf。分担 android.anim 线程的一部分动画工作,减少由于锁导致的窗口动画卡顿问题
- FgThread
RenderThread 渲染线程
ActivityManagerService
- 与 AMS 相关的 Trace 一般会用 TRACE_TAG_ACTIVITY_MANAGER 这个 TAG,在 Systrace 中的名字是 ActivityManager
WindowManagerService
- 与 WMS 相关的 Trace 一般会用 TRACE_TAG_WINDOW_MANAGER 这个 TAG,在 Systrace 中 WindowManagerService 在 SystemServer 中多在对应的 Binder 中出现,比如下面应用启动的时候,relayoutWindow 的 Trace 输出
- 在 Window 的各种场景一般都会有对应的 Trace 点来记录,比如大家熟悉的 relayoutWIndow、performLayout、prepareToDisplay 等
PackageManager PKMS线程
PowerManagerSer PMS线程
HandlerThread
- BackgroundThread,om/android/internal/os/BackgroundThread.java。BackgroundThread 在系统中使用比较多,许多对性能没有要求的任务,一般都会放到 BackgroundThread 中去执行
Binder
- 很多时候当后台有大量的 App 存在的时候,SystemServer 就会由于 Binder 通信和锁竞争,导致系统或者 App 卡顿
- Binder_ IPC线程, 包含16个
system_server 包含4个此同名线程
Heap thread poo 异步的HeapWorker, 包含5个
Signal Catcher 捕捉Kernel信号,比如SIGNAL_QUIT
JDWP 虚拟机调试的线程
watchdog 看门狗线程
CpuTracker 统计进程CPU信息
PerformanaceCont system_server专有
FileObserver system_server专有
WifiMonitor system_server专有
UEventObserver system_server专有
Thread_ 普通线程,包含若干个
AsyncTask # 异步任务,包含若干个
JVM 中的线程
- Mutator 修改器线程,指任何可以修改Heap的线程,一般指应用业务线程。往往是Java线程
- Collector 垃圾回收的线程,往往不是Java线程
- JIT编译线程,单独的线程
- 处理finalization和weak-referencing的线程,往往是单独的线程
Zygote 进程的线程
- ReferenceQueueD 引用队列的守护线程
- FinalizerDaemon 析构的守护线程
- FinalizerWatchd 析构监控的守护线程
- HeapTrimmerDaem 堆整理的守护线程
- GCDaemon 执行GC的守护线程
mediaserver 进程的线程
- mediaserver
- ApmTone
- ApmAudio
- ApmOutput
- Safe Speaker Th
- AudioOut_2
- FastMixer
- AudioOut_4
- FastMixer
- AudioOut_6
- Binder_1
- Binder_2