您的位置:首页 > 移动开发 > Android开发

Android--内存管理机制

2015-10-14 17:43 549 查看
Android--内存管理机制

Android系统是基于Linux 内核开发的操作系统,所以Android与linux系统的内存管理有很多相同之处。

不过Android系统对Linux的内存管理机制进行了优化:Linux系统会在进程活动停止后就结束该进程,

而Android把这些进程都保留在内存中,直到系统需要更多内存为止,以便用户再次激活这些进程时,可以提升了进程的启动速度。

Android系统内存管理机制中的内存回收 与java的垃圾回收机制类似,有一个自己规则来回收内存。

Android系统有六类进程:前台进程、可见进程、次要服务、后台进程、内容供应进程、空进程。

系统会根据“oom_adj”来判断需要结束哪些进程,一般来说,“oom_adj”的值越大,该进程被系统终止的可能就越高。前台程序的“oom_adj”值为0,这意味着它不会被系统终止。

有root的情况下,通过修改系统文件/sys/module/lowmemorykiller/parameters/minfree,即可查看,或动态修改这六个值。

1.前台进程(foreground):目前正在屏幕上显示的进程和一些系统进程。

举例来说,Dialer Storage,Google Search等系统进程就是前台进程;

再举例来说,当你运行一个程序,如浏览器,当浏览器界面在前台显示时,浏览器属于前台进程(foreground)

但一旦你按home回到主界面,浏览器就变成了后台程序(background)。我们最不希望终止的进程就是前台进程。

2.可见进程(visible):可见进程是一些不再前台,但用户依然可见的进程,

举个例来说:时钟、输入法等,都属于visible。

这部分进程虽然不在前台,但与我们的使用也密切相关,

我们也不希望它们被终止(你肯定不希望时钟、天气,新闻等widget被终止,那它们将无法同步,你也不希望输入法被终止,否则你每次输入时都需要重新启动输入法)

3.次要服务(secondary server):目前正在运行的一些服务(主要服务,如拨号等,是不可能被进程管理终止的,故这里只谈次要服务),

举例来说:谷歌企业套件,Gmail内部存储,联系人内部存储等。

这部分服务虽然属于次要服务,但很一些系统功能依然息息相关,我们时常需要用到它们,所以也太希望他们被终止

4.后台进程(hidden):虽然作者用了hidden这个词,但实际即是后台进程(background)

就是我们通常意义上理解的启动后被切换到后台的进程,如浏览器,阅读器等。

当程序显示在屏幕上时,他所运行的进程即为前台进程(foreground),

一旦我们按home返回主界面(注意是按home,不是按back),程序就驻留在后台,成为后台进程(background)。

后台进程的管理策略有多种:有较为积极的方式,一旦程序到达后台立即终止,这种方式会提高程序的运行速度,但无法加速程序的再次启动;

也有较消极的方式,尽可能多的保留后台程序,虽然可能会影响到单个程序的运行速度,但在再次启动已启动的程序时,速度会有所提升。

这里就需要用户根据自己的使用习惯找到一个平衡点

5.内容供应节点(content provider):没有程序实体,进提供内容供别的程序去用的,比如日历供应节点,邮件供应节点等。在终止进程时,这类程序应该有较高的优先权

6.空进程(empty):没有任何东西在内运行的进程,有些程序,比如BTE,在程序退出后,

依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息。这部分进程无疑是应该最先终止的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: