- 浏览: 463855 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
wwwjiandan:
我现在遇到的问题是将Activity设置为非全屏,且andro ...
Android中软键盘弹出时底部菜单上移问题 -
zjhdreams:
求下载链接
Android 9Patch (NinePatch) -
wtjandjay:
受教了 .......
从程序员到项目经理 -
mr_zhang2011:
将博客搬至CSDN -
fyc0109:
为什么我传过去的值, 有的都不对呢, 顺序也是一样的.就是获得 ...
Android Parcelable序列化自定义类集合在Activity间传递
Android进程管理机制及优化 for HTC HeRO(其它设备也可参考)(转载)
Android 2010-09-05 23:39:30 阅读33 评论0 字号:大中小 订阅
Android采取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。
那Android什么时候结束进程?结束哪个进程呢?之前普遍的认识是Android是依据一个名为LRU(last recently used 最近使用过的程序)列表,将程序进行排序,并结束最早的进程。XDA的楼主又进一步对这个管理机制进行研究,有了如下发现:
系统会对进程的重要性进行评估,并将重要性以“oom_adj”这个数值表示出来,赋予各个进程;(系统会根据“oom_adj”来判断需要结束哪些进程,一般来说,“oom_adj”的值越大,该进程被系统选中终止的可能就越高)
前台程序的“oom_adj”值为0,这意味着它不会被系统终止,一旦它不可访问后,会获得个更高的“oom_adj”,作者推测“oom_adj”的值是根据软件在LRU列表中的位置所决定的;
Android不同于Linux,有一套自己独特的进程管理模块,这个模块有更强的可定制性,可根据“oom_adj”值的范围来决定进程管理策略,比如可以设定“当内存小于X时,结束“oom_adj”大于Y的进程”。这给了进程管理脚本的编写以更多的选择。
Android将进程分为六大类:
前台进程(foreground):目前正在屏幕上显示的进程和一些系统进程。举例来说,Dialer Storage,Google Search等系统进程就是前台进程;再举例来说,当你运行一个程序,如浏览器,当浏览器界面在前台显示时,浏览器属于前台进程(foreground),但一旦你按home回到主界面,浏览器就变成了后台程序(background)。我们最不希望终止的进程就是前台进程。
可见进程(visible):可见进程是一些不再前台,但用户依然可见的进程,举个例来说:widget、输入法等,都属于visible。这部分进程虽然不在前台,但与我们的使用也密切相关,我们也不希望它们被终止(你肯定不希望时钟、天气,新闻等widget被终止,那它们将无法同步,你也不希望输入法被终止,否则你每次输入时都需要重新启动输入法)
次要服务(secondary server):目前正在运行的一些服务(主要服务,如拨号等,是不可能被进程管理终止的,故这里只谈次要服务),举例来说:谷歌企业套件,Gmail内部存储,联系人内部存储等。这部分服务虽然属于次要服务,但很一些系统功能依然息息相关,我们时常需要用到它们,所以也太希望他们被终止
后台进程(hidden):虽然作者用了hidden这个词,但实际即是后台进程(background),就是我们通常意义上理解的启动后被切换到后台的进程,如浏览器,阅读器等。当程序显示在屏幕上时,他所运行的进程即为前台进程(foreground),一旦我们按home返回主界面(注意是按home,不是按back),程序就驻留在后台,成为后台进程(background)。后台进程的管理策略有多种:有较为积极的方式,一旦程序到达后台立即终止,这种方式会提高程序的运行速度,但无法加速程序的再次启动;也有较消极的方式,尽可能多的保留后台程序,虽然可能会影响到单个程序的运行速度,但在再次启动已启动的程序时,速度会有所提升。这里就需要用户根据自己的使用习惯找到一个平衡点
内容供应节点(content provider):没有程序实体,进提供内容供别的程序去用的,比如日历供应节点,邮件供应节点等。在终止进程时,这类程序应该有较高的优先权
空进程(empty):没有任何东西在内运行的进程,有些程序,比如BTE,在程序退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息。这部分进程无疑是应该最先终止的。
实践
说完理论,说些实践的东西,怎样管理这六类进程,如何来设置进程管理模块是这部分说的内容。
首先是软件,推荐使用MinFreeManager见附件自由内存管理.zip,市场上就有下载,用于设置这六类进程的管理策略。
软件运行后有六个输入框,在输入框中只能输入数字,这些数字代表了这类进程的处理策略,比如Foreground App下的输入框显示6,就表示,当可用内存低于6MB时,终止Foreground App。下面的类似,如Empty App下的输入框显示24,则表示,当内存低于24MB时,终止Empty App。
从软件数值的设置不难看出结束进程的有限顺序:Empty>Content Provider>Hidden>Secondary Server>Visible>Foreground。
但默认设置确存在一些问题:
各类进程的管理策略的阀值相当接近:6,8,16,20,22,24,最大的相差也不到8MB,在实际程序运行中,很容易导致多种类型的进程同时被关闭。如可用内存在25时,突然启动照相程序,系统可用内存急速,可能会导致空进程、内容供应节点、后台进程、次要服务等同时被关闭
阀值上限较低:一般手机启动后,可用内存在50-100左右,但随着手机的使用,可用内存会逐步减少,最后降低到24MB左右,则系统开始启动进程管理机制,开始结束进程,但这个阀限制设在了24MB,相对来说偏低。其结果会导致系统使用一段时间后,整体速度变慢。很明显的就是,当手机长时间使用后,开启电话拨号,相册,照相机等应用时,系统的反应速度极慢。
基于以上几个问题,不难看出,我们修改的目标也将非常明确,主要解决两个矛盾:
拉开各进程的阀值层次,使得进程管理机制能更有效得工作
提升阀值上限,空出更多的空余内存,以提升系统整体的运行速度
进程管理策略设置原则:
前台进程、可见进程和次要服务是与用户体验息息相关的内容,这部分的进程管理策略要相对保守,给这些进程留下足够的运行空间
压榨无用进程,腾出内存空间给主要程序使用
下面笔者总结了几种设置方式,适应不同的使用需要:
游戏玩家/重度浏览器使用者配置:
用户特点:长时间专注于某一特定的,高内存需求的程序,对多任务的需求不高
配置参数:
Foreground:6
Visible:8
Secondary Server:16
Hiden App:80
Content Provider:90
Empty:100
配置理念:压榨后台进程,内容供应节点和空进程,将内存尽可能多得留给前台进程和系统,提升游戏速度和浏览器体验
优点:程序启动和运行的速度最快
缺点:多任务处理不理想,开启程序较多时,后台进程会被终止
多任务配置:
用户特点:同时运行多个应用程序,需要经常在多个程序间切换
配置参数:
Foreground:6
Visible:8
Secondary Server:16
Hiden App:20
Content Provider:60
Empty:100
配置理念:压榨空进程,给内容供应节点留有一定空间,最大限度提升后台程序的使用空间,提升多任务的处理能力
优点:运行多个程序时,由于可支配内存较多,后台程序不容易被终止
缺点:程序启动的速度和整体系统的运行速度可能会比游戏玩家配置略慢一些,由于经常运行多任务,平时系统的响应速度会受到一定影响
轻度用户/女生专用配置
用户特点:手机的主要功能是短信和电话,偶尔用用相机自拍
配置参数:
Foreground:6
Visible:8
Secondary Server:16
Hiden App:24
Content Provider:32
Empty:48
配置理念:压榨空进程,给内容供应节点留有一定空间,最大限度提升后台程序的使用空间,提升多任务的处理能力
优点:比较均衡的配置,提升了系统的可用内存,使得系统的整体速度得到了提高,拉开了各级进程的管理策略层次,使得管理机制更有效率
缺点:比较均衡的配置,无明显缺点
- 自由内存管理.zip (24.3 KB)
- 下载次数: 8
发表评论
-
android Log.isLoggable方法的使用
2014-06-06 15:35 2994android 动态控制logcat日志开关,通过Log. ... -
View not attached to window manager
2013-01-10 11:55 1077View not attached to window man ... -
代码设置android:icon,android:label
2013-01-05 15:26 7989requestWindowFeature( Window.F ... -
Android项目为一个apk设置多个ICON图标和执行入口
2013-01-05 12:13 3877Android开发中,一个工程对应一个AndroidManif ... -
Intent跳转到系统应用中的拨号界面、联系人界面、短信界面及其他
2012-12-04 12:15 01:调用系统发送短信界面 Uri smsT ... -
Android 源码目录结构详解
2012-11-22 17:20 1462这是Android2.1的源代码的 ... -
如何获取android源代码
2012-07-10 17:50 2738如何获取android源代码 研究 ... -
Android uses-permission大全
2012-06-12 17:33 1066android.permission.ACCESS_CHE ... -
Android 应用程序基础(Application Fundamentals)
2012-05-23 17:42 1257Android 应用程序基础(Application Fun ... -
转Android 音乐频谱实现
2012-02-18 23:35 0最近由于需要实现音乐频谱,所以今天就为大家普及一下。 这里实现 ... -
android VideoView本工程mp4文件
2012-01-09 18:42 2702最近在做一个demo,要求播放视频,记录一下。使用的是Vid ... -
关于android播放mp3与歌词同步问题收集
2012-01-09 17:57 1673关于android播放mp3与歌词同步问题收集,有时间再试。 ... -
android使用MediaPlayer播放音乐文件时遇到的问题
2012-01-09 17:38 18378把mp3文件放在Assets文件夹里,然后用MediaPlay ... -
android资源目录---assets与res/raw的不同
2012-01-05 11:49 2365android资源目录---assets与 ... -
Android 的cpu硬盘 内存 网络设置 系统信息 硬件信息
2012-01-04 10:56 1595转载 http://www.cnmsdn.com/html/2 ... -
使用 Android Compatibility Package 来简化开发工作
2012-01-04 10:12 1431转载 http://www.cnmsdn.com/html/2 ... -
Android 9Patch (NinePatch)
2011-12-26 16:06 45301:介绍 NinePatch图片以*.9.png结尾,和普通 ... -
Windows平台下Android源码的下载
2011-12-21 11:06 1257Windows平台下Android源码的下载 ... -
改变MenuItem默认背景
2011-12-07 19:58 1444@Override public boolean onCre ... -
Android横屏竖屏切换
2011-11-10 18:20 107转载 http://blog.csdn.net/leesido ...
相关推荐
Android的进程管理机制是其操作系统核心的一部分,旨在优化资源分配,确保用户能流畅地使用各种应用程序。在HTC HeRO以及其他Android设备上,这一机制尤其重要,因为它直接影响到用户体验和系统性能。 首先,...
Android的进程管理机制是其操作系统的核心组成部分,旨在优化资源利用,确保系统稳定性和用户体验。Android与传统的Linux系统在进程管理上有显著的区别,特别是在处理后台进程的策略上。Android倾向于保持更多的进程...
----------------------------...• 优化的图形库 包括定制的 2D 图形库, 3D 图形库基于 OpenGL ES 1.0 (硬件加速可选) • SQLite SQLite SQLite SQLite 用作结构化的数据存储 • 多媒体支持 包括常见的音频、视频和...
Android教程(底层)主要涉及的...熟悉Android的底层机制,不仅可以帮助开发者编写更高效的代码,还可以在优化、调试和系统定制时提供必要的理论基础。对于有兴趣深入学习Android开发的人来说,这部分内容是不可或缺的。
Linux内核层提供了基本的系统服务,如安全、内存管理、进程管理和设备驱动等。系统运行库层包括了Android运行时和一些核心库,应用运行时的代码和本地C/C++库依赖于这个层。应用框架层提供了构建应用所需的API,包括...
Service虽然在主进程的主线程运行(Local Service),或者独立进程的主线程(Remote Service),但它允许在不同Activity之间共享,提供了更灵活的控制和管理机制。例如,需要在Activity关闭后仍需执行的任务,可以...
开发这类软件,需要深入理解Android系统的运行机制,如进程管理、资源调度和权限控制。通过系统API,开发者可以编写插件或者服务,实现自动化管理和优化。 6. 结论 Android系统助手软件的实现是Android开发的一个...
综上所述,Android架构的设计充分考虑了移动设备的特点和需求,通过高度定制化的Linux内核、高效的Binder通信机制、灵活的电源管理策略以及丰富的本地库支持,为开发者提供了强大的开发工具,同时也为用户带来了优秀...
- **核心服务**:Android的核心系统服务基于Linux 2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核。 - **硬件抽象层**:Linux内核同时作为硬件和软件栈之间的抽象层,为上层提供统一...
此外,Android还拥有独特的内存和进程管理机制,能根据进程优先级自动优化资源分配,确保用户界面的流畅性和响应速度。 【SQLite数据库在Android中的应用】 SQLite是一款轻量级的关系型数据库,适合在嵌入式系统中...
Binder IPC驱动是Android系统中用于进程间通信的一种机制,它使得不同进程之间能够高效安全地进行数据交换。WiFi驱动和蓝牙驱动则是分别负责与无线局域网和短距离无线通信相关的硬件操作,使得Android设备能够接入...
Android的底层依赖于Linux 2.6内核,提供了安全机制、内存管理、进程调度、网络协议栈等关键服务。Linux内核作为硬件和上层软件之间的抽象层,确保了对各种硬件平台的良好兼容性。 7. **硬件支持**: Android支持...
- **安全性与权限管理**:为了保护用户的隐私和数据安全,Android系统采用了权限管理机制。开发者在设计应用时必须明确声明所需权限,并且合理使用这些权限来避免潜在的安全风险。 通过以上介绍,我们可以看出,...
### 有关Android内存泄漏的问题及解决方案 ...综上所述,理解Android系统的内存管理机制以及如何有效地管理应用内存对于避免OOM错误至关重要。通过对内存使用习惯的改进和优化,可以显著提高应用的性能和用户体验。
《王家林的Android应用程序框架深入浅出》是一门针对Android应用开发的高级课程,旨在帮助开发者深入理解Android应用程序框架的内部运作机制。课程由拥有丰富软硬云整合经验的专家王家林主讲,结合他与Android之父...
- **2008年4月17日**:举办Android开发者竞赛,推动了Android应用开发的进程。 - **2008年8月28日**:Android Market正式上线,为开发者提供了应用分发渠道。 - **2008年9月23日**:T-Mobile G1上市,Android进入...
首款Android设备HTC G1(也称为T-Mobile G1)于2008年发布,随着时间的推移,Android不断更新,引入了新的功能和改进,例如Android Market(现为Google Play),这为用户提供了发现和安装应用的便捷途径。...