当程序的一个组件启动的时候,如果这时程序中没有其他组件正在运行的话,Android系统将会为这个程序启动一个进程和一个线程。默认情况下,同一个程序中的所有组件运行在相同的进程和线程中(该线程被称为main线程)。如果当一个程序的组件启动的时候,该程序已经有一个进程的话(这种情况可能是因为程序的其他的某个组件已经运行了),程序的该组件就会在这个已经存在的进程中被启动,并且运行在同一个线程(即main线程)中。当然,你也可以让同一程序中的不同组件分别运行在不同的进程中,并且你可以为这些进程分别创建各自的线程。
本篇教程将主要介绍在Android程序中的进程和线程具体是怎样工作的。
进程
默认情况下,同一个程序的所有组件运行在同一个进程中,对于大多数的程序来说,这一点最好是不要改变的。然而,如果你发现你需要控制某个组件运行于特定进程的话,你可以在manifest文件中通过android:process属性来设定。
在manifest文件中,<activity><service><receiver><provider>这四种组件标签都支持android:process属性,这个android:process属性就是用来决定这四种组件应该运行在哪个进程中的。你可以通过设置这个属性来让每个组件运行在自己的进程中,或者让一些组件运行在同一个进程中其他的运行在另外的进程中。你甚至可以通过设置android:process来让不同程序的组件运行在同一个进程中,当然这有个前提就是这些不同程序应该有相同的Linux用户ID并且签订了同一证书(sign with the same cerificates)。
在manifest中的<application>标签中,也可以设置android:process属性,这样的话就会让程序中的所有组件都运行在同一进程中。
当Android设备内存资源很少,而当前与用户交互的进程又需要更多的内存资源的时候,Android系统可能就会杀死一些进程。运行在被杀死进程中的程序组件也就同时被销毁了。当用户再次用到这些组件的时候,系统就会这些组件再启动新的进程。
当系统资源紧张,系统决定要杀死某些进程的时候,是根据这些进程与用户的相关性来判断的。比如说,与可见activities所在的进程相比,系统更容易杀死那些不可见activities所在的进程。所以说来,系统决定杀死哪个进程的时候,主要是根据进程中运行的组件的状态来判断的。关于这一点,下篇将进一步讨论。