Android - 应用程序的优先级和进程状态

  Android在回收资源的时候,进程被终止的顺序是由它们的应用程序的优先级所决定的。一个应用程序的优先级等同于它的优先级最高的组件的优先级

  当两个应用程序有相同的优先级时,在较低优先级状态运行时间最长的进程将会首先被终止。进程的优先级也收到进程间依赖性的影响。如果一个应用程序依赖于第二个应用程序所提供的Service或者Content Provider,那么第二个应用程序至少会拥有与它所支持的这个应用程序相同的优先级。

  

所有的Android应用程序都会保持在内存中运行,知道系统需要释放它的资源 供其它应用程序使用时为止。

  通过合理地组织应用程序来保证它具有能够正常工作的适当的优先级时非常重要的。如果没有做到这一点,则应用程序就可能在执行某些比较重要的操作时被终止,或者在不再需要的时候保持运行。

  1)Active进程 Active(前台)的进程是指那些有组件正和用户进行交互的应用程序的进程。这些都是Android尝试通过回收其它应用程序的资源来使其保持相应的进程。这些进程的数量非常少,只有到最后的关头才会终止这些进程

      Active的进程包括:

      1;处于活动状态的Activity,也就是说,它们位于前台并对用户事件进行响应

      2;正在执行onReceive事件处理程序的Broadcast Receiver

      3;正在执行onStart、onCreate或者onDestroy事件处理程序的Service

      4;正在运行、且已被标记为在前台运行的Service

  2)可见进程 可见但是非活动的进程是指那些驻留”可见“Activity的进程。顾名思义,可见的Activity能被用户看到,但是它们并不在前台运行或者能对用户事件作出反应。例如:当一个Activity被部分遮挡时(被一个非全屏或者透明的Activity遮挡)就会出现这种情况。这些进程的数量也很少,只有在资源极度匮乏的环境下,为保证Activity进程继续执行时才会终止这些进程。

  3)启动Service进程 已经启动的Service的进程。因为后台Service没有直接和用户交互,所以他们的优先级要比可见Activity或前台Service低一些。但是他们仍然被认为是前台(foreground)进程,除非活动或者可见的进程需要资源,否则不会终止它们。当系统终止一个运行的Service后,会在资源可用时尝试重新启动Service(除非告诉系统不要这么做)

  4)后台进程 不可见、并且没有任何正在运行的Service的Activity的进程。通常会有大量的后台进程,Android将使用”最后一个被看到,第一个被终止“(last-seen-first-killed)的方式来终止他们,从而为前台进程提供资源。

  5)空进程 为了提高系统整体性能,Android经常在应用程序的生存周期结束之后仍然把它们保存在内存中。Android通过维护这个缓存来减少应用程序被再次启动时的启动时间。通常这些进程会根据需要被定期终止。

posted @ 2015-10-10 12:45  偷着乐  阅读(3726)  评论(0编辑  收藏  举报