Android进程

默认情况下,同一应用的所有组件属于一个进程。 如果内存不足,而其他为用户提供更紧急服务的进程又需要内存时,Android 可能会决定在某一时刻关闭某一进程。在被终止进程中运行的应用组件也会随之销毁。 当这些组件需要再次运行时,系统将为它们重启进程。决定终止哪个进程时,Android 系统将权衡它们对用户的相对重要程度。

进程生命周期

Android 系统将尽量长时间地保持应用进程,但为了新建进程或运行更重要的进程,最终需要清除旧进程来回收内存。 为了确定保留或终止哪些进程,系统会根据进程中正在运行的组件以及这些组件的状态,将每个进程放入“重要性层次结构”中。 必要时,系统会首先消除重要性最低的进程,然后是重要性略逊的进程,依此类推,以回收系统资源。

重要性层次结构一共有 5 级。以下列表按照重要程度列出了各类进程(第一个进程最重要,将是最后一个被终止的进程):

1.前台进程

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

通常,在任意给定时间前台进程都为数不多。只有在内在不足以支持它们同时继续运行这一万不得已的情况下,系统才会终止它们。 此时,设备往往已达到内存分页状态,因此需要终止一些前台进程来确保用户界面正常响应。

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

可见进程被视为是极其重要的进程,除非为了维持所有前台进程同时运行而必须终止,否则系统不会终止这些进程。

正在运行已使用startService()方法启动的服务且不属于上述两个更高类别进程的进程。尽管服务进程与用户所见内容没有直接关联,但是它们通常在执行一些用户关心的操作(例如,在后台播放音乐或从网络下载数据)。因此,除非内存不足以维持所有前台进程和可见进程同时运行,否则系统会让服务进程保持运行状态。

2.可见进程

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

  • 托管不在前台、但仍对用户可见的Activity(已调用其onPause()方法)。例如,如果前台 Activity 启动了一个对话框,允许在其后显示上一 Activity,则有可能会发生这种情况
  • 托管绑定到可见(或前台)Activity 的Service

可见进程被视为是极其重要的进程,除非为了维持所有前台进程同时运行而必须终止,否则系统不会终止这些进程。

3.服务进程

正在运行已使用startService()方法启动的服务且不属于上述两个更高类别进程的进程。尽管服务进程与用户所见内容没有直接关联,但是它们通常在执行一些用户关心的操作(例如,在后台播放音乐或从网络下载数据)。因此,除非内存不足以维持所有前台进程和可见进程同时运行,否则系统会让服务进程保持运行状态。

4.后台进程

包含目前对用户不可见的 Activity 的进程(已调用 Activity 的onStop()方法)。这些进程对用户体验没有直接影响,系统可能随时终止它们,以回收内存供前台进程、可见进程或服务进程使用。 通常会有很多后台进程在运行,因此它们会保存在 LRU (最近最少使用)列表中,以确保包含用户最近查看的 Activity 的进程最后一个被终止。如果某个 Activity 正确实现了生命周期方法,并保存了其当前状态,则终止其进程不会对用户体验产生明显影响,因为当用户导航回该 Activity 时,Activity 会恢复其所有可见状态。

5.空进程

不含任何活动应用组件的进程。保留这种进程的的唯一目的是用作缓存,以缩短下次在其中运行组件所需的启动时间。 为使总体系统资源在进程缓存和底层内核缓存之间保持平衡,系统往往会终止这些进程。

通常情况下Android进程不会被操作系统杀死,若想手动停止进程,可采用如下的方式:

(1)Java法:使用System.exit(0)强制退出当前应用

(2)Android法:Progress.kill(Progress.mypid())退出当前进程



更多相关文章

  1. 第三部分:Android 应用程序接口指南---第二节:UI---第一章 用户界
  2. Android关于后台下载前台通知更新进度条的问题
  3. Android跨进程通信IPC之15——Binder之native层C++篇--注册服务
  4. android使程序进程不被LMK杀死
  5. 通过ddmlib杀死某个android进程的方法
  6. Android自用-----系统自带app与用户app
  7. 杀掉指定进程
  8. Android O startForegroundService(前台服务)流程分析
  9. Android 4.0允许用户禁用所有系统自带程序

随机推荐

  1. MySQL INT类型全解析
  2. 详解MySQL 外键约束
  3. MySQL数据库使用规范总结
  4. MySQL 常用函数总结
  5. 如何选择合适的MySQL日期时间类型来存储
  6. mysql 时间戳的用法
  7. 详细分析mysql MDL元数据锁
  8. MySQL OOM(内存溢出)的解决思路
  9. MySQL MGR 有哪些优点
  10. mysql数据库中字符集乱码问题原因及解决