进程和线程
当一个应用组件启动并且该程序没有其他组件在运行时,Android系统会启动一个单线程的进程来运行这个程序。默认情况下,一个应用程序的所有组件都运行在同一个进程和线程中(通常叫做主线程Main Thread)。如果一个组件启动时,该应用程序已经有组件在运行了,那么这个组件将和已经运行的组件在同一个进程内部运行。当然,你也可以用独立的进程来运行不同的组件,也可以在任意进程中创建新的线程。
进程
默认情况下,同一个应用程序的所有组件应该运行在同一个进程中,大部分的应用程序都不应该改变这种模式。除非你觉得你真的有必要自己控制你的组件应该属于哪个进程时,你可以在清单文件(manifest file)中来实现。
在清单文件中,每一个组件的入口都支持android:process属性来指定你的组件应该在哪个进程中运行。通过设置这个属性,你可以让同一个应用程序的一些组件在不同的进程中运行,而另外一些还是公用一个进程。当然,你也可以通过设置这个属性来实现让不同应用程序的组件运行在相同的进程中。
<application>元素也支持支持android:process属性,设置这个属性会作为其下所有组件的默认值。
当系统中的内存不够用,而又有其他进程需要为用户服务而请求内存时,android会关闭一个进程来释放内存。在这个进程中运行的应用程序组件也因此消亡了,当有新的任务需要执行时就会启动新的进程来运行这些组件。
系统根据进程相对于用户的重要性来决定杀死哪个进程。比如系统会优先杀死那些运行后台活动的进程,而不是那些运行可见活动的进程。因此,一个进程是否会被关闭,取决运行于其中的组件。下面讨论在选择要杀死的进程时遵循的规则。
进程的生命周期
Android系统试图保留一个进程越长越好,但是在需要释放内存给更重要的进程时,也会去清理就的进程。怎样去哪个进程该保留哪个进程该关闭呢?系统根据运行在进程中的组件以及这些组件的状态,给每一个进程定义了一个重要层级。重要层级最低的最先被关闭,次低级的随后,以此类推,以至有必要的时候回收系统资源。
共有五个重要层级,下面根据重要性从高到低列出了不同进程:
- 前台进程
- 可见进程
- 服务进程
- 后台进程
- 空进程
线程
当一个应用程序被加载的时候,系统创建一个线程来执行这个应用程序,被称作“主线程”。