2026年10月29日 · 今日 0 帖 · 会员 6.1万 · 主题 17.4万
登录 · 注册 · 游客,欢迎随便逛逛
返回版块
JK-0110057
Lv5甘首五朝臣等级图标
帖子
5
回复
288
积分
4.6万
注册
2012-06-03
[安卓交流]

【教程】安卓内存管理原理,解决软件 后台掉线

[复制链接]
查看 251 回复 1
楼主 发表于 | 只看该作者
6 人收藏

为什么我刚刷完rom,杀下进程运行

内存有65MB,以后就越来越少了呢?

*

为什么UC浏览器、QQ等程序挂到后

台运行再重新回到前台后就掉线呢?*

为什么每次打开进程管理器,可用内

存总是在24MB左右呢?*

先来看下android的内存管理方式吧:

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.后台进程(hidden):虽然作者用

了hidden这个词,但实际即是后台进

程(background),就是我们通常意

义上理解的启动后被切换到后台的进

程,如浏览器,阅读器等。当程序显

示在屏幕上时,他所运行的进程即为

前台进程(foreground),一旦我们

按home返回主界面(注意是按

home,不是按back),程序就驻留

在后台,成为后台进程

(background)。后台进程的管理策

略有多种:有较为积极的方式,一旦

程序到达后台立即终止,这种方式会

提高程序的运行速度,但无法加速程

序的再次启动;也有较消极的方式,

尽可能多的保留后台程序,虽然可能

会影响到单个程序的运行速度,但在

再次启动已启动的程序时,速度会有

所提升。这里就需要用户根据自己的

使用习惯找到一个平衡点*

5.内容供应节点(content

provider):没有程序实体,进提供

内容供别的程序去用的,比如日历供

应节点,邮件供应节点等。在终止进

程时,这类程序应该有较高的优先权*

6.空进程(empty):没有任何东西

在内运行的进程,有些程序,比如

BTE,在程序退出后,依然会在进程

中驻留一个空进程,这个进程里没有

任何数据在运行,作用往往是提高该

程序下次的启动速度或者记录程序的

一些历史信息。这部分进程无疑是应

该最先终止的。*

简单来说,就是选择退出程序时,并

不是完全退出程序,该程序仍然会在

后台驻留一个进程,以便下次更快的

打开。那什么时候完全关闭该程序

呢?这取决于该程序的类型(就是上

面讲的那几个类型)。系统会给每个

类型的程序一个内存值阈(阀门),

也就是说当运行内存低于某个值时,

系统会自动按照打开的先后顺序来关

闭该类型的程序。例如,当运存小于

24MB时,系统才会自动关闭空进程这

一类型的程序。但是当运存到24MB

时,后台运行QQ就会掉线。想要让

QQ不掉线,就必须让运存在还剩

24MB之前把不用的空进程关掉。*

既然已经知道了android系统的内存管

理原理,那么怎样让它按照我们的意

愿自动关闭我们想关闭的程序,而不

是一遍一遍的全杀任务呢?*

下面推荐一个小软件:自动内存管理*

这款软件,操作简单,刚进入时会用

帮助显示,建议先仔细看一下,需要

ROOT权限才能运行,简单的说,就是

管理每个类型程序的值阈的。再拿上

面QQ的例子来说,我们可以把空进程

的值阈调高点,也就是当运存小于

45MB时,关闭空进程。这样,就可以

最大限度的节省内存空间。软件的操

作方式很简单,就是拖动滑块来调节

程序的值阈。如图*

注意滑块表示的内存数量并不是该类

型程序能用的运存,而是当运存低于

该值时,选择关闭着类型的程序。前

台程序,可见程序,辅助服务建议不

用动,隐藏程序,内容提供可以适当

调高一点,但也不要太高,置空程序

(空闲程序)可以调到最高,设置好

后,点击应用,最好重启一下手机,

个人意见,大家可以实践摸索。*

用自动内存管理的好处: 自动结束你

想结束的进程,不用频繁杀进程。而

这个程序的运存才2.7MB。节省大量

运存。*

神马?你不知道你运行的程序属于哪

个类型的?好吧,再推荐一个软件,

超详细的任务管理器。不仅能查看当

前任务,还能查看手机各个方面的情

况。安装后显示的名称是“系统面板

以上两个软件请在论坛搜索。

登录回复
JK-0072791
Lv5甘首五朝臣等级图标等级图标等级图标
勋章勋章勋章
帖子
165
回复
2,543
积分
1.1万
注册
2011-09-11
1 楼

点我名字加入空白府家族、有机会获得话费和各种业务噢

登录后可以回复这个帖子。旧账号可使用原密码登录。

登录 注册新号
← 返回版块