进程的生命周期

  Android系统会尽力保持应用的进程,但是有时为了给新的进程和更重要的进程回收一些内存空间,它会移除一些旧的进程。

  为了决定哪些进程留下,哪些进程被杀死,系统根据在进程中在运行的组件及组件的状态,为每一个进程分配了一个优先级等级。

  优先级最低的进程首先被杀死。

  这个进程重要性的层次结构有五个等级,下面就列出这五种进程,按照重要性来排列,最重要的放在最前。

一.前台进程 Foreground process

  前台进程是用户当前做的事所必须的进程,如果满足下面各种情况中的一种,一个进程被认为是在前台:

  1.进程持有一个正在与用户交互的Activity(Activity正处于onResume()的状态)。

  2.进程持有一个Service,这个Service和用户正在交互的Activity绑定。

  3.进程持有一个Service,这个Service是在前台运行的,即它调用了 startForeground()

  4.进程持有一个Service,这个Service正在执行它的生命周期回调函数(onCreate()onStart(), or onDestroy())。

  5.进程持有一个BroadcastReceiver,这个BroadcastReceiver正在执行它的 onReceive() 方法。

  杀死前台进程需要用户交互,因为前台进程的优先级是最高的。

二.可见进程 Visible process

  如果一个进程不含有任何前台的组件,但是仍然影响着用户在屏幕上可以看到的内容,就是可见进程

  可见进程满足下列情况之一:

  1.进程持有一个Activity,这个Activity不在前台,但是仍然被用户可见(处于onPause()调用后又没有调用onStop()的状态)。

  这种情况发生在,比如,前台的activity打开了一个对话框,这样activity就会在其后可见。

  2.进程持有一个Service,这个Service和一个可见的(或者前台的)Activity绑定。

  可见的进程也被认为是很重要的,一般不会被销毁,除非是为了保证所有前台进程的运行而不得不杀死可见进程的时候。

三.服务进程 Service process

  如果一个进程中运行着一个service,这个service是通过 startService() 开启的,并且不属于上面两种较高优先级的情况,这个进程就是一个服务进程

  尽管服务进程没有和用户可以看到的东西绑定,但是它们一般在做的事情是用户关心的,比如后台播放音乐,后台下载数据等。

四.后台进程 Background process

  如果进程不属于上面三种情况,但是进程持有一个用户不可见的activity(activity的onStop()被调用,但是onDestroy()没有调用的状态),就认为进程是一个后台进程

  后台进程不直接影响用户体验,系统会为了前台进程、可见进程、服务进程而任意杀死后台进程。

  通常会有很多个后台进程存在,它们会被保存在一个LRU (least recently used)列表中,这样就可以确保用户最近使用的activity最后被销毁,即最先销毁时间最远的activity。

五.空进程

  如果一个进程不包含任何活跃的应用组件,则认为是空进程

  保存这种进程的唯一理由是为了缓存的需要,为了加快下次要启动这个进程中的组件时的启动时间。

  系统为了平衡进程缓存和底层内核缓存的资源,经常会杀死空进程。

相关说明

  1.Android会尽可能地把进程放在高的优先级。

  比如,一个进程拥有一个可见状态的activity和一个service,这个进程会被认为是可见进程,而不是服务进程。

  2.一个进程的等级有可能会因为其他进程的依赖而提高,一个进程服务于另一个进程,则它的优先级不会比它服务的进程优先级低。

  比如,A进程中的一个content provider向B进程中的一个客户提供服务,或A进程中的一个service被绑定在B进程中的一个组件上,则A进程的优先级至少和B进程的优先级一样高。

  3.因为服务进程的优先级比后台进程的优先级高,所以对于一个需要启动一个长时间操作的activity来说,开启一个service比创建一个工作线程的方法更好,尤其是对于操作将很可能超出activity的持续时间时。

  比如要上传一个图片文件,应该开启一个service来进行上传工作,这样在用户离开activity时工作仍在进行。使用service将会保证操作至少有服务进程的优先级。

参考资料

  Sandy Zhang Android深入浅出 视频教程——进程生命周期。

  API Guides: Processes and Threads

  http://developer.android.com/guide/components/processes-and-threads.html

Android 进程生命周期 Process Lifecycle相关推荐

  1. android 生命周期_Android生命周期组件 Lifecycle 源码详解(一)

    在上篇文章: warmcheng:Android生命周期组件 Lifecycle 使用详解​zhuanlan.zhihu.com 中,我们讲了 Lifecycle 的简单使用,本篇我们来研究下它的源码 ...

  2. Android Acitivity 生命周期

    Fragment 的生命周期: Android Fragment 生命周期及其API使用(建议使用自定义View替换Fragment) Activity的生命周期: (1)启动Activity:系统会 ...

  3. android代理生命周期,了解 Activity 生命周期

    当用户浏览.退出和返回到您的应用时,您应用中的 在生命周期回调方法中,您可以声明用户离开和再次进入 Activity 时 Activity 的行为方式.例如,如果您正构建流媒体视频播放器,当用户切换至 ...

  4. Android活动生命周期

    一.Android活动 活动是 Android 应用框架中的一个核心组件,它在一个窗口(Window)对象中绘制用户接口并响应用户的交互. Android四大核心组件分别为Activity(活动).S ...

  5. 【Linux进程、线程、任务调度】一 Linux进程生命周期 僵尸进程的含义 停止状态与作业控制 内存泄漏的真实含义 task_struct以及task_struct之间的关系

    学习交流加(可免费帮忙下载CSDN资源): 个人微信: liu1126137994 学习交流资源分享qq群1(已满): 962535112 学习交流资源分享qq群2: 780902027 文章目录 1 ...

  6. Android安卓——Android程序生命周期

    多处的开发者都给使用者了一个方便,给一些东西设置了一个生命周期的东西.本次学习主要对安卓中程序的生命周期进行讲解. 充分了解安卓生命周期,记住生命周期的优先级,为后续的开发打基础. Android程序 ...

  7. Android RxJava生命周期管理解决方案整理

    一.为什么要做生命周期管理? Observable.create(new ObservableOnSubscribe<String>() {@Overridepublic void sub ...

  8. Android Activity 生命周期详解及监听

    前言 系列文章: Android Activity 与View 的互动思考 Android Activity 生命周期详解及监听 Android onSaveInstanceState/onResto ...

  9. 【Linux 内核】进程管理 ( Linux 中进程的 CPU 资源调度 | 进程生命周期 | 创建状态 | 就绪状态 | 执行状态 | 阻塞状态 | 终止状态 | 进程生命周期之间的转换 )

    文章目录 一.Linux 中进程的 CPU 资源调度 二.进程生命周期 三.进程生命周期之间的转换 一.Linux 中进程的 CPU 资源调度 Linux 操作系统 是 多任务系统 , 可以 同时运行 ...

最新文章

  1. 飞天茅台超卖事故:Redis分布式锁请慎用!
  2. 一个常用的表单文本框input输入提示
  3. Linux的文件系统及其硬盘分区挂载原理
  4. 企业:怎样的渗透测试频率是合适的?
  5. mdp文件-Chapter4-MD.mdp
  6. 水木告白工作室:Java从零入门之模仿头条资讯(一)
  7. 不同技术团队的配合问题及DevOps
  8. 【文末福利】图论算法:稳定婚姻问题,如何找到最适合自己的另一半
  9. e分钟带你利用Python制作词云图
  10. model数据库orm操作
  11. linux数据软件,Linux数据安全工具:数据镜像软件DRBD的管理与维护
  12. 百度SDN实践与思考
  13. 移动应用的黄金四分类
  14. ResponsibleChain(责任链模式)
  15. python删除word表格中的某一行_python-docx添加和删除表格行、列
  16. 数据库实验八 触发器实验
  17. PDF文件密码怎么解除
  18. C语言应用(1)——Unix时间戳和北京时间的相互转换
  19. 精美黑色UI版创客新零售系统源码
  20. Linux中的lo回环接口详细介绍

热门文章

  1. linux支持ppp网卡,linux和安卓上(ppp widget)使用3g网卡的方法
  2. java 属性访问修饰符_Java中的访问修饰符(二十七)
  3. vue 页面引入多个内部js_.html多页页面引入vue.js怎么开发?
  4. java生成随机十位数_随机10位字符串生成
  5. 给你的网页添加随机BGM背景音乐
  6. try-catch捕获异常信息后Spring事务失效处理方法
  7. kmp学英语必须设置
  8. Memcache安装 2
  9. jQuery:从零开始,DIY一个jQuery(1)
  10. LeetCode 31. Next Permutation