Android采 取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多 内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。
那Android什么时候结束进程?结束哪个进程呢?之前普遍的认识是Android是依据一个名为LRU(last recently used 最近使用过的程序)列表,将程序进行排序,并结束最早的进程。但实际上这里面有更多的细节。
1.系统会对进程的重要性进行评估,并将重要性以“oom_adj”这个数值表示出来,赋予各个进程;(系统会根据“oom_adj”来判断需要结束哪些进程,一般来说,“oom_adj”的值越大,该进程被系统选中终止的可能就越高)
2.前台程序的“oom_adj”值为0,这意味着它不会被系统终止,一旦它不可访问后,会获得个更高的“oom_adj”,作“oom_adj”的值是根据软件在LRU列表中的位置所决定的;
3.Android不同于Linux,有一套自己独特的进程管理模块,这个模块有更强的可定制性,可根据“oom_adj”值的范围来决定进程管理策略,比如可以设定“当内存小于X时,结束“oom_adj”大于Y的进程”。这给了进程管理脚本的编写以更多的选择。

Android将进程分为六大类:

1.前台进程(foreground):目前正在屏幕上显示的进程和一些系统进程。举例来说,Dialer Storage,Google Search等系统进程就是前台进程;再举例来说,当你运行一个程序,如浏览器,当浏览器界面在前台显示时,浏览器属于前台进程 (foreground),但一旦你按home回到主界面,浏览器就变成了后台程序(background)。我们最不希望终止的进程就是前台进程。
2.可见进程(visible):可见进程是一些不再前台,但用户依然可见的进程,举个例来说:widget、输入法等,都属于visible。这 部分进程虽然不在前台,但与我们的使用也密切相关,我们也不希望它们被终止(你肯定不希望时钟、天气,新闻等widget被终止,那它们将无法同步,你也 不希望输入法被终止,否则你每次输入时都需要重新启动输入法)
3.次要服务(secondary server):目前正在运行的一些服务(主要服务,如拨号等,是不可能被进程管理终止的,故这里只谈次要服务),举例来说:谷歌企业套件,Gmail内 部存储,联系人内部存储等。这部分服务虽然属于次要服务,但很一些系统功能依然息息相关,我们时常需要用到它们,所以也太希望他们被终止
4.后台进程:就是我们通常意义上理解的启动后被切换到后台的进程,如浏览器,阅读器等。当程序显示在屏幕上时,他所运行的进程即为前台进程 (foreground),一旦我们按home返回主界面(注意是按home,不是按back),程序就驻留在后台,成为后台进程 (background)。后台进程的管理策略有多种:有较为积极的方式,一旦程序到达后台立即终止,这种方式会提高程序的运行速度,但无法加速程序的再 次启动;也有较消极的方式,尽可能多的保留后台程序,虽然可能会影响到单个程序的运行速度,但在再次启动已启动的程序时,速度会有所提升。这里就需要用户 根据自己的使用习惯找到一个平衡点
5.内容提供者(content provider):没有程序实体,进提供内容供别的程序去用的,比如日历供应者,邮件供应者等。在终止进程时,这类程序应该有较高的优先权
6.空进程(empty):没有任何东西在内运行的进程,有些程序,比如BTE,在程序退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息。这部分进程无疑是应该最先终止的。

欢迎扫描二维码,关注公众号

Android进程分类与管理相关推荐

  1. [Android]你不知道的Android进程化(3)--进程等级

    我们可以看到现在Android的运行内存越来越大,6G.8G的大内存时代,越大运存将允许运行越多的app,而Android系统也组建增大进程可以申请的最大运存量.Android 系统将尽量长时间地保持 ...

  2. android 项目分类汇总

    原地址:  http://www.cnblogs.com/deBug-hao/p/4730959.html Android 开源项目分类汇总 Android 开源项目分类汇总 Android 开源项目 ...

  3. Android进程保活方案

    自己曾经也在这个问题上伤过脑经,前几日刚好有一个北京的哥们在QQ说在做IM类的项目,问我进程保活如何处理比较恰当,决定去总结一下,网上搜索一下进程常驻的方案好多好多,但是很多的方案都是不靠谱的或者不是 ...

  4. Android 进程保活招式大全

    目前市面上的应用,貌似除了微信和手Q都会比较担心被用户或者系统(厂商)杀死问题.本文对 Android 进程拉活进行一个总结. Android 进程拉活包括两个层面: 提供进程优先级,降低进程被杀死的 ...

  5. 【Linux 内核】实时调度类 ① ( 进程分类 | 实时进程、普通进程 | Linux 内核 SCHED_FIFO、SCHED_RR 调度策略 | 实时调度实体 sched_rt_entity )

    文章目录 一.进程分类 ( 实时进程 | 普通进程 ) 二.Linux 内核调度策略 1.SCHED_FIFO 调度策略 2.SCHED_RR 调度策略 三.实时调度实体 sched_rt_entit ...

  6. 【Android 逆向】Android 进程简介 ( Android 应用启动流程 )

    文章目录 前言 一.Android 进程 二.Android 应用启动流程 前言 参考 [Android 逆向]Android 系统文件分析 ( /proc/pid 进程号对应进程目录 | oom_a ...

  7. Android进程保活招式大全

    原文出处:http://dev.qq.com/topic/57ac4a0ea374c75371c08ce8 作者:腾讯--张兴华 目前市面上的应用,貌似除了微信和手Q都会比较担心被用户或者系统(厂商) ...

  8. Android 进程保活手段分析

    如何进行进程保活,首先我们应该先分析一下进程被杀死的原因开始 Android进程被杀死的场景分析: 从 Android 的进程被杀死的场景分析,查看被杀死的原因 一.Android手机的进程回收策略 ...

  9. 理解Android进程创建流程

    基于Android 6.0的源码剖析, 分析Android进程是如何一步步创建的,本文涉及到的源码: /frameworks/base/core/java/android/os/Process.jav ...

  10. Linux进程 管理,Linux进程查看与管理以及作业控制

    Linux进程查看与管理 静态结构:重底层开始往上 底层:硬件 kernel(OS):各硬件接口封装成简洁的接口 库:将内核功能封装成功能模块,供程序员研发使用 OS的基本功能:文件系统.网络功能.进 ...

最新文章

  1. Redis Sentinel 服务端实现原理
  2. 深度学习caffe的代码怎么读?
  3. ALV调用标准GUI STATUS
  4. js和jsp所有页面跳转总结
  5. ora-03113 访问某条记录_用了Excel十几年,你居然不知道“记录单”?!可能错过一个亿……...
  6. Python 实现针对时间序列预测的特征选择
  7. cascade=CascadeType.ALL的深坑
  8. 【codevs1946】【BZOJ2434】阿狸的打字机,AC自动机练习
  9. python培训价目表-python培训费用多少?
  10. redis-pool go
  11. Cisco Guard BGP流量牵引配置
  12. 做JSP大学实用教程实验
  13. UDS诊断协议规范与要求
  14. 一元函数积分学基本计算例题
  15. MFC关于*.rc和resource.h文件的巧妙运用
  16. C语言读取指定文件夹下面的所有文件
  17. C语言整除、取余运算的符号问题
  18. c语言水仙花两种方法,c语言:3种方法;求出0~999之间的所有“水仙花数”并输出。...
  19. docker配置Java环境
  20. 用指针实现将字符串2合并在字符串1后面

热门文章

  1. easyconnect(mac版)总是初始化问题
  2. 转:著名的100个管理定律点评6 -- 决策(上)
  3. 什么样的条件能够满足游戏音效制作
  4. 通过opencv制作人脸识别的窗口,这也太疯狂了
  5. 【JZOJ】 【NOIP2014】【模拟试题】保镖排队
  6. 自学三个月编写简单走迷宫游戏
  7. SVN提交时出现remains in conflict错误
  8. c语言水王争霸链表,水王争霸
  9. 成绩排序(一)c++
  10. 博士阶段能学到什么硕士学不到的东西?