操作系统是否为每个应用程序进程创建一个新线程?

时间:2019-12-11 15:59:46

标签: android multithreading

在阅读关于线程和进程的Android's documentation时。他们说文档运行在一个名为main的单线程下,但是并不确定它是针对每个进程还是跨进程的单线程。

我正在尝试了解手机中的线程创建。我刚刚创建了两个示例应用程序,并试图在两个应用程序中分别使用thread idthread name打印当前Thread.currentThread().getId()Thread.currentThread().getName,线程名称分别为mainthread id2。同样,我尝试使用android.os.Process.myPid()为单个应用程序打印进程ID-process id是不同的。因此很明显,它正在为每个应用程序创建新流程。

我怀疑它是否与用于呈现Application1和Application2之间的活动的线程相同。如果是,Android框架如何处理?如果它是整个设备(电话)的单线程,那么当我在一个应用程序中调用Thread.currentThread().sleep(1000 * 60 * 60)并尝试通过adb shell命令从Application2启动另一个活动时会发生什么。这会引起任何异常吗?

是否有与进程关联的线程池-对于Android,当它为Application创建新进程时?

据我了解,zygote进程是在创建每个应用程序进程时克隆的(父进程将是合子)? zygote是否正在创建所有应用程序都在重用的主线程?

进程和线程如何相互关联?父子进程可以共享线程吗?

2 个答案:

答案 0 :(得分:1)

线程是进程的子对象。

每个进程可以有一个或多个线程,每个线程都有自己的内存空间。

不同进程上的线程是不同的线程。

您可以在此处详细了解它们之间的区别: What is the difference between a process and a thread?

答案 1 :(得分:1)

  

当应用程序组件启动且该应用程序没有   任何其他正在运行的组件,Android系统都会启动新的Linux   具有单个执行线程的应用程序进程。通过   默认情况下,同一应用程序的所有组件都在同一环境中运行   进程和线程(称为“主”线程)。

有关此主题的更多信息可以在以下官方文档中找到:Android processes and threads overview

根据我自己的说法,我可以补充说,相同的应用程序组件共享相同的进程和主线程,除非它们特别注册在AndroidManifest.xml中以在单独的进程中运行。尽管如此,当启动一个新进程时,Android将创建并启动几个线程,其中一个是main / UI线程,它将具有相同的id-2,因为这是系统要启动的第三个线程。