Android 应用程序的生命周期

【译自:http://code.google.com/android/intro/lifecycle.html

  大多数情况下,每个 Android 程序都运行在自己的 Linux 进程空间里。当程序代码需要运行的时候进程就被创建出来,在程序已不在被使用或者系统需要回收其所占内存再分配给其它程序使用之前,这个进程一直存在。

  Android 的一个非常重要且不同寻常的特性就在于应用程序进程的的生命期由不得它自己直接控制。应用程序生命期由系统通过对如下几个条件的组合来裁决:系统知道应用程序的一部分正在运行,应用程序正在处理的事情对用户有多重要,系统中的可用内存还有多少。

  对应用程序开发者来说,理解各个组件(特别是Activity,Service 和 IntentReceiver)对应用程序生命期的不同影响是非常重要的。对组件不正确的使用可能会导致应用正在处理重要事务时被系统干掉。

  对进程生命期处理不当的一个常见例子是一个 IntentReceiver 在其 onReceiveIntent() 方法中接收到一个 intent 时启动了一个线程,接着就从 onReceiveIntent() 中返回了。一旦这个函数返回,系统就会认为这个 IntentReceiver 不再活动,因此它的宿主进程也就不会再被用到了(除非其内部的其它应用程序组件处于激活状态)。这时系统可能随时干掉这个进程,终止运行于其中的线程以回收内存。对这个问题的解决方案是在这个进程中启动一个 Service,这样系统就知道这个进程中仍然有些工作在做。

  为了在内存不足时裁决哪个进程应该被干掉,Android 会根据运行在进程中的组件和和组件的状态给进程们排出一个重要级别来。这些重要级别按重要性来排列依次是:

1. 前台进程就是在屏幕顶层,持有 Activity 正在跟用户进行交互的(其 onResume() 已经被调用过),或者是一个正在运行的 IntentReceiver(其 onReceiveIntent() 方法正在执行)进程。这样的进程在系统中非常少,只有当内存非常短缺,短缺到了连这些进程都无法继续运行的时候这类进程才会被干掉。通常此时移动设备已经到达了内存极限,这样做才能让用户界面不停止响应。

2. 可见进程就是持有 Activity,在屏幕上可见但又不是前台进程的那个进程(他的 onPause() 方法被调用过)。……

3. 服务进程……

4. 后台进程……

5. 空进程……

未完……

Leave a Reply