在阅读关于线程和进程的Android's documentation时。他们说文档运行在一个名为main
的单线程下,但是并不确定它是针对每个进程还是跨进程的单线程。
我正在尝试了解手机中的线程创建。我刚刚创建了两个示例应用程序,并试图在两个应用程序中分别使用thread id
和thread name
打印当前Thread.currentThread().getId()
和Thread.currentThread().getName
,线程名称分别为main
和thread id
是2
。同样,我尝试使用android.os.Process.myPid()
为单个应用程序打印进程ID-process id
是不同的。因此很明显,它正在为每个应用程序创建新流程。
我怀疑它是否与用于呈现Application1和Application2之间的活动的线程相同。如果是,Android框架如何处理?如果它是整个设备(电话)的单线程,那么当我在一个应用程序中调用Thread.currentThread().sleep(1000 * 60 * 60)
并尝试通过adb
shell命令从Application2启动另一个活动时会发生什么。这会引起任何异常吗?
是否有与进程关联的线程池-对于Android,当它为Application创建新进程时?
据我了解,zygote
进程是在创建每个应用程序进程时克隆的(父进程将是合子)? zygote
是否正在创建所有应用程序都在重用的主线程?
进程和线程如何相互关联?父子进程可以共享线程吗?
答案 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,因为这是系统要启动的第三个线程。