大家其实都或多或少知道,Android系统有自已的任务管理器,当系统内存不足时,系统需要KILL一些进程(应用),以回收一部分资源,来保证系统仍可以正常的运行,而不会崩溃,今天,就具体讲讲这个原理。

进程优先级(importance hierarchy)

Android系统尽量保持进程运行的更久,但是仍有时候,需要结束掉老的进程,回收内存来保证新的,或更重要的进程运行。要决定哪些进程运行,哪些被 KILL,系统会为每个运行的进程或者组件设置其进程优先级。通常KILL的顺序是优先级最低,然后其次,等等依次这样下去。

一共有五级:

前台进程(Foreground Process)

满足以下条件即为前台进程:

a. 用户当前正在操作的Activity(Activity.onResume方法已经被调用了);

b. Service绑定到用户当前正在操作的Activity;

c. Service在前台运行(Service.startForeground);

d. Service正在执行生命周期中的方法之一(onCreate, onStart, onDestroy);

e. BroadcastReceiver正在执行onReceive方法;

通常,前台进程是很少的(就以上几种),所以它们是最后被KILL的(内存极少,系统为了能保证正常运行,且能与用户交互,当前台进程不止一个时,会KILL某些前台进程)。不过,这情况,对于目前的手机来说,不太可能发生的事。

可见进程(Visible process)

满足以下条件即为可见进程:

a. Activity不为前台进程,但生命周期处于onPause状态,也就是说,一个Dialog挡住了部分Activity;

b. 和1.b中一样,Service绑定在当前可见或前台Activity;

可见进程同样也很重要,当系统内存不足,且为了保证前台进程继续运行时,可见进程会被KILL掉。

服务进程(Service process)

通常都是被startService方法调用而运行的Service,而没有绑定到其它Activity上(即1.b, 2.b中所说的情况),这些Service可能是在后台下载,或是类似音乐播放器一样等服务,同样,为了保证前台和可见进程能够正常运行,系统会KILL 掉服务进程。

后台进程(Background process)

这些进程通常都是Activity完全不可见,即生命周期处于onStop阶段时,只要不影响到用户的操作,那么,就可以随时被系统KILL掉用来保证前台,可见或是服务进程的运行。通常,有很多后台进程在运行,系统会将它们放入到LRU(Last Recent Used,最近使用)列表中,用来决定:最近使用过的最后被KILL,而很长时间没使用过的,将会被第一个KILL掉。

空进程(Empty process)

这类进程没有任何活动应用,之所有会有这样的进程,是为了缓存的目的。为了加快某个组件下次启动的时间而设计的。系统经常KILL这些进程用来平衡整个系统资源(通常是在进程缓存和内核缓存之间做平衡)。

总结:

i) 系统会根据进程的不同状态,会动态调整进程的优先级,比如:用户当前与某个Activity交互,然后按了一下HOME键,则进程从前台进程切换至后台进程,并被加入到LRU列表中;

ii) 进程所处不同的优先级,将会决定当系统内存不足时,其命运将会如何,进程被KILL的顺序上面已经说的很清楚了,我这里再罗列下(空进程不考虑):

— 后台进程 -> 服务进程 -> 可见进程 -> 前台进程;

后台进程又以LRU来决定:

— LRU中找到最长时间没用过的先被KILL,然后找到其次最长时间没用过的被KILL,依次类推,而最近被使用过的最后KILL。

转载于:https://www.cnblogs.com/gao-chun/p/4848584.html

内存不足时Android 系统如何Kill进程相关推荐

  1. Android系统中的进程管理:内存的回收

    本文是Android系统进程管理的第三篇文章.进程管理的前面两篇文章,请参见这里: Android系统中的进程管理:进程的创建 Android系统中的进程管理:进程的优先级 本文适合Android平台 ...

  2. Android系统中的进程管理:进程的创建

    对于操作系统来说,进程管理是其最重要的职责之一. 考虑到这部分的内容较多,因此会拆分成几篇文章来讲解. 本文是进程管理系统文章的第一篇,会讲解Android系统中的进程创建. 本文适合Android平 ...

  3. Android系统中的进程管理:进程的优先级

    本文是Android进程管理系列文章的第二篇,会讲解进程管理中的优先级管理. 进程管理的第一篇文章:<进程的创建>请跳转至这里. 本文适合Android平台的应用程序开发者,也适合对于An ...

  4. Android系统在新进程中启动自定义服务过程(startService)的原理分析 (下)

    Step 10. ActivityManagerService.attachApplicationLocked 这个函数定义在frameworks/base/services/java/com/and ...

  5. 根据用户查进程_【磨叽教程】Android进阶教程之在Android系统下各进程之间的优先级关系...

    导读:本文大约2000字,预计阅读时间3分钟.本文纯属技术文,无推广. 正文     首先应用进程的生命周期并不由应用本身直接控制,而是由系统综合多种因素来确定的.Android系统有自己的一套标准, ...

  6. 获取android com包名,Android系统中获取进程(和顶端包名)

    概要: android L前我们可以使用 getRunningTasks(int maxNum) maxNum int: The maxNumnumber of entries to return i ...

  7. android版本内存多少,内存大小决定Android系统版本?

    随着Android系统版本的更新(从Android 1.x-4.x),Android手机的内存容量也在不断的翻番中.从最早的256MB到最新的3GB,12倍的数值变化在彰显科技的进步之余,也潜移默化地 ...

  8. antimalware service executable占用内存过高_Win10系统svchost.exe进程占用内存和网速过高的解决方法...

    我们在使用Windows10系统的过程中,不少用户一旦发现电脑异常,例如异常卡顿,就会查看一下任务管理器,是否有进程过高占用了CPU.内存.网络等,而在任务管理器中发现了一个名称为"svch ...

  9. android 内存占用工具,Android系统检测程序内存占用各种方法

    1.检查系统总内存 liuhx@uc ~ $ adb shell cat /proc/meminfo MemTotal:         840868 kB MemFree:          457 ...

  10. Android系统级开发进程清理功能的一些记录和发现(一)

    Android系统级开发清理功能的一些记录和发现 客户需求做一键清理所有后台进程的功能,在查阅网上相关博客以及自己研究以后找到以下几种方法: killBackgroundProcesses() 这种方 ...

最新文章

  1. 微信小程序将页面按钮悬浮固定在底部
  2. C++与Java多态的区别
  3. 入职地府后我成了人生赢家_拿年终奖前跳槽,你才是赢家
  4. (转)用Javascript获取页面元素的位置
  5. 期末前端web大作业——用前端语言写一个小游戏
  6. 数据库实验报告1数据库定义实验
  7. Windows 11彻底禁用IE浏览器后,银行网银系统完全解决方案!
  8. 在腾讯轻量云上搭建 CS:GO 服务器
  9. 阿里云天池机器学习训练营(Day7, Day8):机器学习算法(三):K近邻(k-nearest neighbors)初探
  10. PSD文件生成Unity预设
  11. 2014年双11抢货宝典-双11促销商品价格对比清单---妈妈再也不用担心我成为剁手党啦
  12. 《别告诉我你懂PPT》札记
  13. 考一个华为认证HCIP需要学习那些东西?
  14. easyUI —— JS加载easyUI表格
  15. 计算机cct 考试试题,基础计算机cct考试模拟试题.doc
  16. 笔记本一直提示计算机内存不足怎么办,笔记本电脑内存不足怎么办 解决方法...
  17. 电脑用着用着突然黑屏怎么处理
  18. 【TWVRP】基于matlab蚁群算法求解带时间窗车辆路径规划问题【含Matlab源码 1930期】
  19. 主管护师计算机考试如何舞弊,人机对话操作步骤详解,2020主管护师考生必看!...
  20. 容器运行过程中异常处理

热门文章

  1. Python密码存储器
  2. python爬虫之------每天给她(他)一个小故事啦啦啦啦
  3. 数组中的奇数排在偶数组前面
  4. datagrivew删除列_c# 如何获取datagrivew 表里面名称为card_id的一列,并把这列里面的元素循环...
  5. 题目:将一个正整数分解质因数
  6. Kubernetes部署项目报错ImagePullBackOff日志提示rpc error: code..http: server gave HTTP response to HTTPS client
  7. php字符串里含有全角符号,php半角转全角字符函数
  8. 垃圾代码和优质代码的区别?
  9. OpenGL ES总结(五)OpenGL 中pipeline机制
  10. 幅频响应 matlab画法,MATLAB环境下频率响应曲线的绘制方法.pdf