Android内存调用机制


Android是Linux的内核,每一个程序都是一个独立的JAVA虚拟机,就和油汤里的油花一样互不干扰,这样就充分保证了万一某个程序的JAVA虚拟机崩溃,系统依旧稳定正常运行。
而Android和传统Linux不一样的地方又在于,传统Linux在进程活动停止后就结束了。这就类似于S60和WM一样,关闭程序,内存释放。而Android会把这些进程保留在内存里,就是为了保证你再次激活这些进程时候启动的更快。比如挂在桌面的Widgets,具体一点拿新浪微博举例吧,我刚看完退出,突然我想我再发一条微博吧。那么这个时候我可以直接在桌面Widgets上操作。设想一下如果我退出的时候这个进程就终止了,那么我在桌面上点击Widgets的时候会不会卡顿一下甚至没有响应?这就跟我们把Widgets挂在桌面的行为完全背离了,放在桌面上就是为了能随时观察到程序运行的情况,以及随时可以快速调用程序。所以Android并没有在进程活动停止就释放对应的内存,那么也许你还是会有疑问,那么内存够不够用呢?

当然我知道大家的洁癖很多,有的人就是见不得内存值太小……但话说回来,不建议大家去手动管理Android的内存,也许你会不习惯……也没啥好劝告的,总之,不要把你的智能机想的那么笨就行了。

如果你感兴趣可以做个试验,内存很少的时候,你打开一个大游戏,然后退出,你会发现...


=======  以下文字非专业人士勿看  =======

是的,我理解。因为大家这么多年Windows都用习惯了,Windows内存不足的时候机器卡的会让你想砸掉机箱。而且调用虚拟内存的时候硬盘喀喀喀想的让你肉疼。你肯定也会怕你的手机明明512M内存结果就剩下30来M把你卡到崩溃。事实上呢,Android会在系统需要更多内存的时候,去释放掉那些占用内存的进程——这个活动是智能的。最早大家认为是有个排序,比如最近使用过哪些程序(LRU机制,Last Recently Used),然后结束最早的进程。不过并非如此,否则就变成我们上小学时候那样,个子高的块头大的男生跟班长下去拔草扛新书,女生们留在班里绣花吧。这样很明显不公平,而且没准会结束掉那些我们并不想结束掉的进程——譬如说这会儿我想切回到刚才后台的网页继续浏览结果悲怆的发现它被系统给我强制关闭了。

Android把进程分成了一些优先级,比如前台进程(Foreground),比如我们正在看书,那么看书的程序就是前台进程,这些进程是不会被系统优先结束的。当我把它切到后台的时候,它就变成后台进程了。

还有可见进程(Visible),这个怎么说呢,譬如输入法程序,你平时是看不见它的,但是在你打开输入界面的时候,它会很快的弹出来,而不是让你等啊等啊等。看不到的原因是透明度的机制,咱就不要钻牛角尖讨论为啥我看不见了……还有桌面的Widgets,比如我们的桌面时钟,这个东西就是可见的,如果它被系统终止了会有什么样的结果?这个Widgets依然会显示在桌面上,但是时针不走了…… -_-||

主要服务。比如说,电话的拨号功能,你也不想正急着打电话呢结果人家给你卡半天吧?尤其像联系人动不动就上千的,载入一遍真的很慢啊……所以这些主要服务平时也不会被系统自动结束,除非你非要关它,关了也会自己重新加载的。这也是你完全释放内存以后过一会就看着内存可用值又慢慢降低的原因。

次要服务(secondary server)。诸如谷歌企业套件、Gmail等。看着这些程序出现在任务管理器里可能你会非常的莫名其妙,丫的这都哪跟哪啊我没开啊……其实它们和一些系统功能也是息息相关的。比如Gmail的邮件推送,我们时常需要用到它们,所以系统也太会去终止它们。甚至于HTC机器上著名的HTC Sense,这个也是次要服务,但是其实它承接着整个系统界面的运行。所以,如果你强行关闭所有进程的时候,你的屏幕会变成一片白……然后慢慢等HTC Sense加载。

后台进程(hidden)。就是我们通常意义上理解的启动后被切换到后台的进程,比如如浏览器和阅读器。后台进程的管理策略有多种,但是一般来讲,系统都会视内存情况,尽可能多的保留后台程序,这样会影响到你启动别的程序的运行速度。我想这个很好理解,因为内存确实不够了,而且你还没让系统自动释放内存。但好处是,你再次切换到这些已启动的程序时几乎是无缝的,速度绝对比你从0开始启动它要快得多。所以,这种后台进程在内存极度不够的时候,肯定会被系统选择性的干掉的。

内容供应节点(content provider)。没有程序实体,仅提供内容供别的程序去用的,比如日历供应节点、邮件供应节点等。在系统自动终止进程时,这类程序享有优先的被干掉权……

空进程(empty)。没有任何东西在内运行的进程,有些程序在退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息。这部分进程无疑是系统最先终止的

posted @ 2011-09-15 11:50  magicyang1987  阅读(808)  评论(0编辑  收藏  举报