随着大家收货后会有很多乐粉晒内存,为啦方便大家,在网上搜集了一些相关Andriod管理的相关机制合理管理内存,整理下发个贴。
首先要知道Android系统是基于Linux 2.6内核开发的开源操作系统(linux是啥都不知道自己去百度吧),而linux系统的内存管理有其独特的动态存储管理机制。不过Android系统对Linux的内存管理机制进行了优化,Linux系统会在进程活动停止后就结束该进程,而Android把这些进程都保留在内存中,直到系统需要更多内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。
如果你懂java,就会更容易理解Android系统的内存管理机制。与java的垃圾回收机制类似,系统有一个规则来回收内存。进行内存调度有个阈值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。Android系统有六类进程:前台进程、可见进程、次要服务、后台进程、内容供应节点、空进程。对于高手而言可以用MinFreeManager之类的软件进行进程管理,分别为六类进程设定不同的阈值来操纵系统的内存分配机制。不过对于一般用户而言,Android系统默认的分配机制已经可以满足使用需要,因此也不需要再去调整。
安卓的内存管理机制:
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.后台进程(hidden):虽然作者用了hidden这个词,但实际即是后台进程(background)
就是我们通常意义上理解的启动后被切换到后台的进程,如浏览器,阅读器等。
当程序显示在屏幕上时,他所运行的进程即为前台进程(foreground),
一旦我们按home返回主界面(注意是按home,不是按back),程序就驻留在后台,成为后台进程(background)。
后台进程的管理策略有多种:有较为积极的方式,一旦程序到达后台立即终止,这种方式会提高程序的运行速度,但无法加速程序的再次启动;
也有较消极的方式,尽可能多的保留后台程序,虽然可能会影响到单个程序的运行速度,但在再次启动已启动的程序时,速度会有所提升。
这里就需要用户根据自己的使用习惯找到一个平衡点
5.内容供应节点(content provider):没有程序实体,进提供内容供别的程序去用的,比如日历供应节点,邮件供应节点等。在终止进程时,这类程序应该有较高的优先权
6.空进程(empty):没有任何东西在内运行的进程,有些程序,比如BTE,在程序退出后,
依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息。这部分进程无疑是应该最先终止的。
对于一些内存很低的低端Android机而言,系统默认的内存分配机制无法实现很完善的内存调配。所以在运行大型游戏时需要先清理一下内存。
有人说后台挂着程序很费电,事实上Android的应用在被切换到后台时,它其实已经被暂停了,并不会消耗cpu资源,只保留了运行状态。至于QQ、音乐播放之类的程序可以在后台运行,是因为这些程序在后台开启了服务,而服务可以后台运行,所以没有带服务的应用在后台是完全不耗电的,没有必要关闭。这种设计本来就是一个非常好的设计,下次启动程序时,会更快,因为不需要读取界面资源。
Android系统这样的设计不仅非常适合移动终端的需要,而且减少了系统崩溃的可能,确保了系统的稳定性。老想着清理内存的同学完全是因为被塞班或者Windows毒害太深,事实上,经常用Taskiller之类的软件关闭后台所有进程,很容易造成系统的不稳定。很多时候出现问题,只要重启就能解决,其原因也在于此。
Android 是如何管理进程的
在Android里,进程和程序是两回事,程序可以一直保留在系统里,但是没有任何进程在后台“运行”,也不消耗任何系统资源。所有的程序保留在内存中,所有可以更快的启动回到它之前的状态。当你的内存用完了,系统会自动帮你杀掉你不用的任务。
需要明白的是,Android用RAM的方式,跟windows啥的是两回事。在Android的世界里面,RAM被用满了是件'好'事。它意味着你可以快速打开之前打开的软件,回到之前的位置。所以Android很有效的使用RAM,很多用户看到他们的RAM满了,就认为拖慢了他们的电话。而实际上,是你的CPU——当你的软件真正运行时用到的东东——才是拖慢手机的瓶颈。
为啥说进程管理软件是*
很流行的各种进程管理软件都说帮你释放内存是件好事,但这是不正确的。打开这些软件时,他们告诉你“运行”的软件和杀死他们的方法。你也可以在“服务”里面看到到底程序的哪些部分在“运行”,占用了多少内存,剩余多少内存。所有的这些都告诉你,杀掉这些程序能够释放内存。但是这些软件都没有告诉你这些程序到底消耗了多少CPU时钟,而仅仅告诉你能释放多少内存。要知道,用满了内存实际上是件好事,我们要注意的是CPU,真正消耗你的手机资源,消耗电池的东东。
因此,杀掉程序通常是没有必要的(尤其是用"autokill"方式杀掉程序)。更严重的是,这样做会更快的拖垮你的手机能力和电池性能。不管是手动杀掉进程,还是自动的杀掉进程,重新打开程序,你实际上是在用CPU资源来做这件事。
事实上,这些进程管理软件消耗了系统资源。而且,这些软件会莫名其妙的杀死其他程序造成乱七八糟的结果(尤其对些小白来说)。所有的这些,告诉我们,你的手机在用它自己的方式工作,特别是你只是个小白用户,用这些进程管理软件耽误的事情比得到的要多。
那么你应该怎么做呢
这么说吧,各种程序开发水平是不一样的。很多人以前或者现在使用这些进程管理软件,释放内存,感觉手机快了那么一点。造成这个问题的原因是,你用的软件本身程序写得太烂了,比如,有得程序完全没有必要联网时,还在联着。这个时候,杀掉这些程序,你能得到好处,就是说,只有你知道你在干什么得时候,杀掉让你爱但是很烂的程序才能帮上你。
如果你真关心你的手机的表现和进程,还是多关注下系统进程,看看里面说各种程序都消耗了多少资源,如果某个程序消耗太多,时不时杀掉它可能会有那么一点帮助。
总的来说,进程管理软件正确的用途是杀那些出错的程序、会导致死机有BUG的进程以及疑似病毒进程等,而不是一味地追求内存空得多程序在内存里放着,CPU不调用,它就是死的,一般程序你退出了它就不再运行了,不占用CPU资源(占用了CPU时间这个才是要耗电的),这就是2.2以上版本系统那个“快速启动”的工作原理。
android内存优化方法:
1、按Home退出,程序保留状态为后台进程;按返回键退出,程序保留状态为空进程。空进程的oom_adj评值高于后台进程,更容易被系统清理。所以推荐用返回键退出。
2、UC、愤怒的小鸟、都市赛车之类的程序本身提供关闭功能的,还是尽量主动关闭。浏览器、电子市场等不提供关闭功能的,直接返回键退出即可。
3、下载开机启动项管理软件。实际最痛苦的就是在开机的时候一堆有用没用的那些程序都处理跳跳。这方面配合主流的管理软件就可以解决掉,列如:360手机卫士、安装优化大师等。另外有些开机启动管不了,这就是root权限的问题了。(ps:大可乐手机已有root权限了)。
4、root权限后精简不必要的系统内在APK。