Android应用启动时会创建哪些线程
从一个问题开始本文,当启动一个应用时,会创建哪些线程?UI线程是肯定有的,那么还有没有其他线程呢?
在Android Studio中通过adb shell命令可以查看应用的进程与线程信息,操作之前,先明确几个概念:
- UID——User ID,即用户id,在Android中,每个应用就代表一个用户,用户id在应用安装后就会分配。
- PID——Process identifier,即进程id。
- PPID——Parent process identifier,即父进程id,我们知道每个应用进程都派生自另一个进程,而Android中所有应用进程都派生自Zygote进程,也就是说Zygote进程是所有应用的父进程,待会儿我们也会证明这一事实。
针对个人的一个包名为me.geed.planner的应用,使用adb命令进行如下操作:
- 先查看Zygote的进程情况
- 再来看me.geed.planner应用的进程情况
- 最后打印me.geed.planner应用的线程信息
上述三步操作结果如下图所示:
其中第一列代表UID,第二列为PID,第三列为PPID,最后一列为Name。因此我们可以发现Zygote进程的PID为297。继续往下看,me.geed.planner应用的UID为u0_a228,其PID为22819,PPID为297,这就证明了Zygote是该应用的父进程。当然我这里只是打印了一个应用的信息,你也可以打印所有应用的进程信息,它们的父进程id都为297。再接着看图中应用的线程信息,第一个实际上是UI线程,可以发现后续几个线程都是UI线程的子线程,都是由UI线程