大家好,今天我主要来和大家交流下低端android手机内存优化的问题。
一、问题的引出前天,我在论坛发了一个帖子,想请教大家关于联想A68e内存优化的问题,但是回复者寥寥无几,课件也很少有机油对这方面有较深入的学习了解。
我今天中午,查了有关资料,也用了自己的手机进行了测试,觉得可能对A68e(其实是广大低端Android手机)用户有点帮助,所以特地来分享以下。
(说明:本人用的是Sumsumg I9103,我媳妇用的是电信套餐的联想A68e,这几天我没拿到她的手机来测试,所以只能自己的手机进行测试,但是我觉得还是具有一定的参考价值的)。
二、ROM和RAM首先,我先解释一下ROM和RAM的区别。
ROM是Read Only Memory,即只读存储器;RAM是Access Random Memory,即随即读写存储器。
ROM是存储程序和数据的,类别电脑的硬盘,可以存放安装的程序、文件、数据等。
而论坛中有开AppEXT2的方法(我没试过),那个只是节省出更多的ROM空间,这样可以使程序运行得更为流畅,但是不能解决“同时运行程序的数量最大值太小”的问题。
以A68e为例,如果开一个QQ、音乐播放器,再开个UC浏览器估计机子就崩溃而导致程序退出。
RAM才是程序运行时所占用的物理空间。
RAM的价格比ROM贵很多,所以RAM的大小一半程度上决定了机子的价位(另一半就是CPU)。
我的Sumsung是1G RAM,同时开QQ、QQ游戏、QQ音乐、浏览器、微信等七、八个程序也毫无压力。
所以RAM太小是影响A68e(包括很多Android手机)用户体验的原因。
如果你是个游戏玩家、手机达人,那么这类机子一定不适合你。
如果你希望能像有高端机那样的用户体验,我建议你还是多话点银子购买配置高的Android手机。
关于官方宣传256的RAM实际上只有170,那是有一部分被Android系统占用。
我的手机1GRAM,实际上也只有724M。
三、Android系统内存管理机制及进程调度机制下面开始具体的分析了。
首先Android系统是基于Linux 内核开发的开源操作系统,li nux系统的内存管理有其独特的动态存储管理机制。
Android采取了一种有别于Linux的进程管理策略,Linux系统在进程活动停止后就结束该进程,而Android把这些进程都保留在内存中,直到系统需要更多内存为止。
这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。
Android系统这样的设计不仅非常适合移动终端(手机、平板)的需要,而且减少了系统崩溃的可能,确保了系统的稳定性。
老想着清理内存的同学完全是因为被塞班或者Windows毒害太深,事实上,经常用Taskiller之类的软件关闭后台所有进程,很容易造成系统的不稳定。
很多时候出现问题了,只要重启就能解决的原因也在于此。
广大机油一定会发现,关闭了QQ、微信等程序后,其实并没有完全关闭这些程序。
这些程序在后台占用了一定的内存,但是并没有运行时(或者说运行在前台时)占用得多。
而且这些程序总会自己启动,清理过内存后又会再次出现。
Android系统有六类进程:前台进程、后台服务、可见进程、隐藏程序、空进程、内容提供者。
那Android系统什么时候结束进程?结束哪个进程呢?如果你懂java,就会更容易理解Android系统的内存管理机制。
与java的垃圾回收机制类似,系统有一个规则来回收内存。
内存调度依据各类进程的“阈值”设置,只有低于这个值,系统才会按一个列表来关闭用户不需要的东西。
而这个列表中进程排列的先后,是依据LRU(Least Recently Used 最近最少使用)进程调度方法。
即当为各类进程分配的RAM小于各类进程设置的阈值时,最近最少使用的进程,将会最先被关闭。
四、Android系统的六大类进程(这里我是参考了其他的地方资料,根据自己的理解改写,可能有误,请指正。
)1.前台进程:目前正在屏幕上显示的应用进程和一些系统进程。
举例来说,当你运行一个程序,如浏览器,当浏览器界面在屏幕显示时,浏览器属于前台进程,但一旦你按home键回到主界面,浏览器在后台运行,并且依然可见。
我们最不希望终止的进程就是前台进程。
2.后台服务:目前正在运行的一些服务(绝大部分的系统进程)。
举例来说:拨号、联系人等,这部分服务虽然属于后台服务,但很一些系统功能依然息息相关,我们时常需要用到它们,是不可能被进程管理终止的。
(后台服务不属于后台程序)。
3可见进程(后台进程):后台进程是一些不再前台,但用户依然需要用到的进程,举例来说,后台运行的QQ(需要随时接受消息)、音乐播放器等。
我个人认为可见进程就是后台进程!这部分进程虽然不在前台,但与我们的使用也密切相关,我们也不希望它们被终止。
(塞班智能机,长按功能键就能显示目前正在运行的应用程序,大家都记得吧?)4.隐藏进程:个人认为是一些应用程序提供的服务!比如输入法、QQ、飞信、QQ音乐即使退出后,亦可以发现他们仍在运行,只是占用的内存没有运行时那么多。
如果此时QQ上有人找你的话,你是无法接受到的。
但是这些服务在运行具体干什么,我也不太清楚,可能可以加快启动速度,而我认为也可能跟推送消息有关吧(使用飞信的同学一定明白我说的这句话!)。
对于RAM太小的我们,这些进程是我们希望被终止的。
而对于RAM足够的大机子,没有必要关闭。
5.空进程:没有任何东西在内运行的进程,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息。
这部分进程无疑是应该最先终止的。
6.内容提供者:没有程序实体,只是为别的程序提供内容来使用的,比如日历等。
(虽然日历是系统程序,但是可以终结)。
在终止进程时,这类程序应该有较高的优先权。
关于可见程序和隐藏程序我想举个例子。
当我运行QQ时(不论后台、前台),用系统的任务管理器是可以查看到QQ正在运行。
当我退出后,任务管理器显示没有任务,但是用第三方的进程管理器查看,还是可以发现QQ进程,该进程应该是隐藏进程,可能还包含空进程。
细心的话,大家都是可以发现的。
五、设置阈值,优化内存。
下面用两种情景来说明:情景一:我希望可以边听音乐边聊QQ,还希望在QQ没说话的时候能用浏览器看新闻。
音乐播放程序始终在后台运行,偶尔需要调出来换歌。
而QQ和浏览器可能需要频繁切换。
我们希望这三个程序都不会因为RA M不够而退出,对吧?情景二:我想玩一个稍大的游戏,这时候你可能会把内存清理一下(清理隐藏程序)。
但是你希望有更方便的方法让这些自动关闭,是吧?(QQ、飞信、音乐所提供的服务,还有一些不常用的程序提供的服务,比如钛备份、ES文件浏览器等等,甚至是从系统程序中释放一些内存比如日历、权限管理等,虽然这些单个占内存不多,但是对我们RAM小的人弥足珍贵)。
那什么时候完全关闭该程序呢?怎样让它按照我们的意愿自动关闭我们想关闭的程序,而不是一遍一遍的全杀任务呢?这取决于该程序的类型(就是上面讲的那几个类型)。
系统会给每个类型的程序一个内存阈值(阀门),也就是说当运行内存低于某个值时,系统会自动按照打开的先后顺序来关闭该类型的程序。
例如,当运存小于24MB时,系统才会自动关闭空进程这一类型的程序。
我们可以提高这一阈值,比如100M,那么RAM小于100时,系统就会关闭这些空进程。
前台程序、后台服务、可见程序是与用户体验息息相关的内容,这部分的进程管理策略要相对保守,要给这些进程留下足够的运行空间,而压榨无用进程,腾出内存空间给主要程序。
使用下面就来介绍设置阈值的方法。
我们这里不介绍配置系统文件的方法,而使用软件的方法更为简便。
我介绍的使用的是安卓优化大师里的内存管理插件(无需下载,进入界面后向左滑动屏幕,在工具栏里)。
系统默认:前台程序8MB 后台服务16MB可见程序12MB 隐藏程序24MB空程序32MB 内容提供者28MB可以看到,系统默认设置中各类进程的内存阀值相当接近。
在实际程序运行中,很容易导致多种类型的进程同时被关闭。
游戏玩家/重度浏览器使用者配置:前台程序6MB 后台服务16MB可见程序8MB 隐藏程序80MB空程序100MB 内容提供者90MB用户特点:长时间专注于某一特定的,高内存需求的程序,对多任务的需求不高配置理念:压榨隐藏进程(不是后台服务)、内容提供者和空进程,将内存尽可能多得留给前台进程(大型游戏、浏览器)和系统提升游戏速度和浏览器体验优点:程序启动和运行的速度最快缺点:多任务处理不理想,开启较多程序时,后台进程(可见进程)会被终止。
个人分析:此配置适用于情景二。
游戏是我们的前台进程,当我们玩游戏时,一般不会还开着多个后台进程(QQ、音乐等),所以可见程序(后台程序)的阈值没有必要改变。
如果你要硬开着,那么游戏肯定是无法启动的!注意,并不能说此配置不适用于情景一!因为三个程序并不是很多!多任务配置:前台程序6MB 后台服务16MB可见程序8MB 隐藏程序20MB空程序100MB 内容提供者60MB用户特点:同时运行多个应用程序,需要经常在多个程序间切换配置理念:压榨空进程,给内容供应节点留有一定空间,最大限度提升后台程序的使用空间,提升多任务的处理能力优点:运行多个程序时,由于可支配内存较多,后台程序不容易被终止缺点:程序启动的速度和整体系统的运行速度可能会比游戏玩家配置略慢一些,由于经常运行多任务,平时系统的响应速度会受到一定影响个人分析:多任务配置和上一种配置主要差别在于隐藏程序的阈值设置。
隐藏程序的存在不仅可以提供服务,并且能加快首次启动程序的速度。
我建议如果只是常用3、4种软件,那么就使用游戏玩家/重度浏览器使用者配置。
当经常地开启较多任务时,才开启多任务配置。
所以我认为对于低端android机,游戏玩家/重度浏览器使用者配置是最佳的选择!!!!轻度用户/女生专用配置前台程序6MB后台服务16MB可见程序8MB 隐藏程序24MB空程序48MB内容提供者32MB用户特点:手机的主要功能是短信和电话,偶尔用用相机自拍配置理念:压榨空进程,给内容供应节点留有一定空间,最大限度提升后台程序的使用空间,提升多任务的处理能力优点:比较均衡的配置,提升了系统的可用内存,使得系统的整体速度得到了提高,拉开了各级进程的管理策略层次,使得管理机制更有效率缺点:比较均衡的配置,无明显缺点个人分析:此配置对低端Android机没有明显作用!六、总结对于A68e用户(或者说低端Android机),我建议使用游戏玩家/重度浏览器使用者配置。
为什么这么说。
因为此配置对隐藏程序的阈值较高。
像钛备份、ES文件浏览器等软件我们只是偶尔使用,但是当我们完全退出后,他们仍然存在与内存中。