理解Android中的线程及线程间通信

本文详细探讨了Android应用启动时创建的线程,包括UI线程及其子线程,以及GC、Signal Catcher、Compiler和Binder线程。线程调度由Linux CFS负责,介绍了线程优先级和线程组的概念。接着阐述了线程间通信的多种方式,如Pipes、Shared Memory、Signaling、Blocking Queue和Android的消息机制,并分析了各种通信方式的特点和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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命令进行如下操作:

  1. 先查看Zygote的进程情况
  2. 再来看me.geed.planner应用的进程情况
  3. 最后打印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线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值