Android 中的“前台”与“后台”相关定义整理

“前台”指前台进程,“后台”指后台进程。


1、用于服务限制目的

如果满足以下任意条件,应用将被视为处于前台:

  • 具有可见 Activity(不管该 Activity 已启动还是已暂停)。
  • 具有前台服务。
  • 另一个前台应用已关联到该应用(不管是通过绑定到其中一个服务,还是通过使用其中一个内容提供程序)。 例如,如果另一个应用绑定到该应用的服务,那么该应用处于前台:
    • IME
    • 壁纸服务
    • 通知侦听器
    • 语音或文本服务

如果以上条件均不满足,应用将被视为处于后台。

引用自:Android Developer 后台执行限制 的 “后台服务限制” 一节


2、用于内存管理

(下面文中它指的是目标进程,以及下文所说的 “托管 (honsting) ”,个人觉得应该是 host 的 ing 的形式,它的主语是目标进程,只不过在文中省略来该主语,其意思大致为 “持有,包含” ,个人见解)

前台进程:

用户当前操作所必需的进程。如果一个进程满足以下任一条件,即视为前台进程:

(1)存在用户正在交互的屏幕顶部运行一个Activity(它的onResume()方法已被调用)
(2)它有一个当前正在运行的BroadcastReceiver(其BroadcastReceiver.onReceive()方法正在执行)
(3)它有一个服务当前正在执行它的其中一个回调(即Service.onCreate(),Service.onStart()或Service.onDestroy())中的代码
(4)某个 Service,绑定到用户正在交互的 Activity 上

可见进程:

没有任何前台组件、但仍会影响用户在屏幕上所见内容的进程。 如果一个进程满足以下任一条件,即视为可见进程:

(1)正在屏幕上运行一个对用户可见的Activity,但不在前台(它的onPause()方法已被调用)。 例如,如果前景活动显示为允许在其后面看到先前活动的对话框,则可能发生这种情况
(2)有一个作为前台服务运行的服务,通过Service.startForeground()(这是要求系统将服务视为用户知道的事情,或者对他们来说基本可见)
(3)正在托管系统正在使用的用于用户知晓的特定功能的服务,例如动态壁纸,输入法服务等。
(4)托管绑定到可见(非前台)Activity 的 Service。(目标进程持有一个绑定到可见 Activity 的 Service)

服务进程:正在运行已使用 startService() 方法启动的服务且不属于上述两个更高类别进程的进程。

后台进程:包含目前对用户不可见的 Activity 的进程(已调用 Activity 的 onStop() 方法)。如有一个只包含 Activity 的应用进程,然后按下 Home 键回到了桌面,此时该应用进程就处于后台进程了。

根据进程中当前活动组件的重要程度,Android 会将进程评定为它可能达到的*别。例如,如果某进程托管着服务和可见 Activity,则会将此进程评定为可见进程,而不是服务进程。

综合引用自:
(1)谷歌开发文档 -> 进程和线程 -> 进程生命周期
(2)谷歌开发文档 -> Processes and Application Lifecycle


3、对于整个 Android 系统

Android 中的“前台”与“后台”相关定义整理