Android进程分类与管理

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

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进程和线程CPU策略调整方式 本文介绍了在Android系统中设置进程/线程CPU分组和优先级的多种方法。主要包括两种方案:源码方式(修改framework层代码)和命令行方式(使用cpuset和chrt命令)。文章详细说明了如何设置CPU分组(如top-app组)、调整CPU亲和性,以及如何设置线程优先级(包括实时线程SCHED_FIFO和普通线程)。同时提供了查看线程优先级的方法,并解释了优先级数值的对应关系。最后给出了三个实际案例,展示如何通过原生Linux接口设置CPU亲和性和线程调度策略。这些方法可用于验证CPU调度问题和优化 阅读详情

相关推荐

python使用OneVsRestClassifier分类器和xgboost模型构建多分类模型(模型标签为[1,0,0],[0,1,0],[0,0,1])、可视化多分类模型的ROC曲线、混淆矩阵等

python使用OneVsRestClassifier分类器和xgboost模型构建多分类模型(模型标签为[1,0,0],[0,1,0],[0,0,1])、可视化多分类模型的ROC曲线、混淆矩阵、classification_report结果

statistics+insight+vista+power 480

浅谈android内存优化

写在开头android优化系列: 浅谈androidUI布局优化作为一个android开发来说,内存管理真的是一个烦的不能烦的问题,隔三差五的就听到产品和测试咆哮,app怎么这么卡,哎,内存泄露了。喂喂喂,怎么闪退了,我的天,内存溢出了!当然,我说的比较夸张,不过不可否认,的确有这种问题。本文就自己学到的知识,从三个个方面总结。 内存管理和一些基础概念知识 内存泄露乃至oom优化解决 内

say_from_wen的博客 1417

Android进程管理1—优先级adj

Android 应用状态发生变化以后,会导致进程的procStateschedGroup等进程状态的重新计算和设置,,并且通过方法将对应的优先级、adj、进程状态等值应用到进程上,从而改变进程的优先级和调度策略。以上的过程大概可以概括为:通过设置进程组,改变了进程所在 cgroup,通过设置调度策略实现主线程在实时优先级和普通优先级的切换,通过设置优先级改变进程 nice 值,同时在底层会改变进程所在的 cgroup。延伸问题什么是cgroup、线程调度策略的区别,线程优先级的应用?

Eqiqi的博客 3382

android cpu调度策略_android进程、线程调度简介

引言1、Audio、SurfaceFlinger等相关实时任务是如何调度的?2、怎样保证app的main thread、render thread等高优先级线程不会被其他低优先级的线程打断?3、app退到后台时,怎么限制其对cpu资源的占用?4、android是怎样支持ARM的big.LITTLE架构的?本文接下来将回答这几个问题。linux的调度策略android基于linux内核,androi...

weixin_39640417的博客 3246

android Api文档笔记(一)进程

进程可分为以下几种 前台进程 用户当前操作所必需的进程。如果一个进程满足以下任一条件,即视为前台进程: 托管用户正在交互的 Activity(已调用 Activity 的 onResume() 方法)托管某个 Service,后者绑定到用户正在交互的 Activity托管正在“前台”运行的 Service(服务已调用 startForeground())托管正执行一个生命周期

qq_35161540的博客 374

android(安卓) 有哪些进程

android进程   一般大体分为    前台进程,后台进程,可见进程,服务进程,空进程这五大进程

shendixiong的专栏 397

Android进程额重要性等级划分

Android系统会尽可能时间长的来维持一个程序的进程,但当系统资源紧张的时候,系统终究会为一些新的或者更重要的进程杀死一些旧的进程来释放内存。系统主要是根据进程中组件的运行状态,来决定每一个进程的重要性,从而决定哪个进程需要杀死,哪个进程需要保持。最不重要的进程最容易先被杀死,其次最不重要的进程会被杀死,以此往复,直到系统恢复了需要的资源。 既然系统主要根据进程的重要性来决定一个进程的存亡,下

vannesspeng的专栏 723

android五个进程等级

1.Foreground Process:  前端的进程状态:  正处于Activity Resume()状态  正处于bound服务交互状态  正处于服务在前台运行的状态,(startForeground()被调用,例如:播放音乐)  Service生命周期函数正在被执行(onCreate(),onStart(),onDestory())  BroadcastReceiver正在执

xiaoxiaofang123的专栏 717

Android内存管理机制

内存管理机制 进程分类 优先级:前台进程 > 可见进程 > 服务进程 > 后台进程 > 空进程

gs344937933的专栏 345

android 进程管理

系统会对进程的重要性进行评估,并将重要性以“oom_adj”这个数值表示出来,赋予各个进程;(系统会根据“oom_adj”来判断需要结束哪些进程,一般来说,“oom_adj”的值越大,该进程被系统选中终止的可能就越高)(请发邮件到freeget.one@gmail.com获得翻强软件。) 前台程序的“oom_adj”值为0,这意味着它不会被系统终止,一旦它不可访问后,会获得个更高的“oom_ad

博艺的技术专栏 5240

android7.0 进程管理,Android 7.0 ActivityManagerService(7) 进程管理相关流程分析(1)

Android框架定义了四大组件,一般的功能都是基于这些组件的。因此, 在Android平台上开发时,很少会接触到进程的概念。但根据前面分析Activity、Service和BroadcastReceiver的流程,我们可以清晰地看到,所有这些组件最终还是要运行在具体的进程之中。于是,AMS作为管理四大组件的核心服务,也承担起了进程管理的责任。在AMS中,进程管理相关的函数分别为updateLru...

weixin_35128151的博客 531

前台进程、可见进程、服务进程、后台进程、空进程

前台进程  前台进程Android系统中最重要的进程,是用户正在交互的进程 可见进程 可见进程指部分程序界面能够被用户看见,却不在前台用户交互。 服务进程  一个包含已启动服务的进程就是服务进程,服务没有用户界面,不用户直接交互,但能够在后台长期运行,提供用户所关心的重要功能 后台进程 如果一个进程不包含任何已经启动的服务,而且没有用户可见的Activity,则这

fasfewatgerjhytsjy的专栏 6744

Android进程管理机制及优化

理论 Android采取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程Android把这些进程都保留在内存中,直到系统需要更多内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。 那Android什么时候结束进程?结束哪个进程呢?之前普遍的认识是Android是依据一个名为LR

游戏爱好者1199 1055

android内存管理的原理--进程管理

Android采取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程Android把这些进程都保留在内存中,直到系统需要更多内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。 那Android什么时候结束进程?结束哪个进程呢?之前普遍的认识是Android是依据一个名为LRU(last r...

轻轻草原 114

Android 中的进程

按照重要性从高到低一共有五个级别:前台进程 前台进程是用户当前正在使用的进程。只有一些前台进程可以在任何时候都存在。他们是最后一个被结束的,当内存低到根本连他们都不能运行的时候。一般来说, 在这种情况下,设备会进行内存调度,中止一些前台进程来保持对用户交互的响应。

海阔天空的专栏 1056

Android 进程和线程

关于Android进程的认识  当一个程序第一次启动的时候,Android会启动一个LINUX进程和一个主线程。默认的情况下,所有该程序的组件都将在该进程和线程中运行。 同时,Android会为每个应用程序分配一个单独的LINUX用户。Android会尽量保留一个正在运行进程,只在内存资源出现不足时,Android会尝试停止一些进程从而释放足够的资源给其他新的进程使用, 也能保证用户正在访问的当前进

jkm12213的博客 361

android 进程

Android进程分为六大类:1.前台进程(foreground):目前正在屏幕上显示的进程和一些系统进程。举例来说,Dialer Storage,Google Search等系统进程就是前台进程;再举例来说,当你运行一个程序,如浏览器,当浏览器界面在前台显示时,浏览器属于前台进程(foreground),但一旦你按home回到主界面,浏览器就变成了后台程序(background)。我们...

weixin_30668887的博客 125

安卓进程优先级

平时使用安卓手机时,不知道你是否注意到,即便是按返回键退出了应用,打开加速球时,依旧可以看到应用还在运行,这其实就是安卓进程的策略。   安卓进程分类   前台进程:获得焦点的进程,可用户进行交互。 可视进程:当前可以看见的进程,但不是前台进程。比如,当前面那个进程的Activity部分透明或全部透明时,其后面的Activity就能看见了,但并没有得到焦点,不能进行交互。 服务进程

宇不语的博客 936

android内存管理

Android内存管理机制 1、基于Linux内存管理   Android系统是基于Linux 2.6内核开发的开源操作系统,而linux系统的内存管理有其独特的动态存储管理机制。不过Android系统对Linux的内存管理机制进行了优化,Linux系统会在进程活动停止后就结束该进程,而Android把这些进程都保留在内存中,直到系统需要更多内存为止。这些保留在内存中的进程通常情况下不会影响整...

ylq240911的博客 329
上一篇: Android热补丁技术方案整理
下一篇: Activity的生命周期和启动模式详解
robert_chao
博客等级 码龄15年 265粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值