Android系统试图尽可能长地保持一个应用程序进程,但是当内存低时它最终还是需要移除旧的进程。为了决定保持那个进程及杀死那个进程,Android将每个进程放入了一个基于运行于其中的组件的重要性等级和这些组件的状态。重要性最低的进程首先被杀死,然后是其次,以此类推。
![安卓系统将进程分为5大类 - 以德糊人 - ——挨踢民工 Playkid—— 安卓系统将进程分为5大类 - 以德糊人 - ——挨踢民工 Playkid——](http://img9.ph.126.net/skkcVhTNnDqnjSE8nl3lGg==/2510475317299585229.jpg)
每一个Android应用都是以一个进程的方式运行的,其生命周期不是有自身控制,而是由系统根据运行的应用的一些特征来决定。一个活动中的Activity就是在Foreground(前景)模式,背景执行的程序叫做Service。如果执行中的Activity全部画面被其他Activity取代时,该Activity便被停止,甚至被系统清除。
1)前台进程(Foreground)
目前正在屏幕上显示的进程和一些系统进程。举例来说,Dialer Storage、Google Search等系统进程就是前台进程;再举例来说,当你运行一个程序,如浏览器,当浏览器界面在前台显示时,浏览器属于前台进程(Foreground),但一旦你按HOME回到主界面,浏览器就变成了后台程序(Background)。
2)可见进程(Visible)
可见进程是一些不在前台,但用户依然可见的进程,举个例来说:Widget、输入法等,都属于Visible。这部分进程虽然不在前台,但与我们的使用也密切相关,我们也不希望它们被终止(你肯定不希望时钟、天气,新闻等Widget被终止,那它们将无法同步,你也不希望输入法被终止,否则你每次输入时都需要重新启动输入法);
3)次要服务(Secondary Server)
目前正在运行的一些服务(主要服务如拨号等是不可能被进程管理终止的,故这里只谈次要服务),举例来说:谷歌企业套件,Gmail内部存储,联系人内部存储等。这部分服务虽然属于次要服务,但有一些跟系统功能依然息息相关,我们时常需要用到它们。
4)后台进程(Hidden)
虽然作者用了Hidden这个词,但实际即是后台进程(Background),就是我们通常意义上理解的启动后被切换到后台的进程,如浏览器,阅读器等。当程序显示在屏幕上时,他所运行的进程即为前台进程(Foreground),一旦我们按HOME返回主界面(注意是按HOME,不是按Back),程序就驻留在后台,成为后台进程(Background)。后台进程的管理策略有多种:有较为积极的方式,一旦程序到达后台立即终止,这种方式会提高程序的运行速度,但无法加速程序的再次启动;也有较消极的方式,尽可能多的保留后台程序,虽然可能会影响到单个程序的运行速度,但在再次启动已启动的程序时,速度会有所提升。这里就需要用户根据自己的使用习惯找到一个平衡点;
5)空进程(Empty)
没有任何东西在内运行的进程,有些程序,比如BTE,在程序退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息。这部分进程无疑是应该最先终止的。Empty Process运行,实际上就是运行一个虚拟机,当要启动一个应用时就直接在其上继续运行。