教大家认识安卓后台
洪荒九龙拉吾棺吧
全部回复
仅看楼主
level 7
wlr11235 楼主
从一开始,安卓的多任务模式一直遭受诟病,有的人认为有些进程自启是“流氓”,“费电”,并且有次在诺记吧看到一个12级脑残乱喷这点,所以今天我到处搜罗了一些信息,整理了一下,就安卓后台机制“占内存,卡,费电”这三点做一些客观解释,希望可以帮到大家,神论之处多多指出
爪机更新有点慢,但是绝对不太监
   --嗨! 大家好初次见面 我是老王滴小尾巴、很萌很萌哒、不要踩我哦~
2013年07月10日 00点07分 1
level 7
wlr11235 楼主
有很多人都说,那为什么内存少的时候运行大型程序会慢呢?其实很简单,在内存剩余不多时打开大型程序,会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候.这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统.所以,论坛上有个更改内存阀值的程序可以有一定改善. 但改动也可能带来一些问题,取决于值的设定. 有很多人都说,那为什么内存少的时候运行大型程序会慢呢?其实很简单,在内存剩余不多时打开大型程序,会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候.这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统.所以,论坛上有个更改内存阀值的程序可以有一定改善. 但改动也可能带来一些问题,取决于值的设定. 总结一下
1.大程序A已经开启,占用70%内存,如果再想运行一个B,需要50%的内存,则就需要一个将A从内存中释放或者压缩的过程,所以表现出来的就是慢一会儿
2.A\B\C\D\E共占用内存80%,运行新程序Z需要 20%的内存,系统内存因为没见过剩余0的时候,也就是应该剩一部分空闲内存,那么就需要从A~E这几个程序中选择一个或者几个来关闭,这一过程也需要耗费系统资源,所以会慢一会儿
3.也就是说你手动去杀程序的时候,就是替系统在释放内存,就算你不杀,在需要内存的时候系统也会自动释放.
4.不在后台运行的程序(没服务的),即使不杀也不会耗电.在后台运行的(有服务的)程序,如后台放歌,当然会耗电.
.
   --嗨! 大家好初次见面 我是老王滴小尾巴、很萌很萌哒、不要踩我哦~
2013年07月10日 01点07分 3
level 11
看不懂,太高端
我是乐于助人,热爱祖国的小花O(∩_∩)O~~
2013年07月10日 01点07分 4
[吐舌]看看就行 看看就行
2013年07月10日 01点07分
level 7
wlr11235 楼主
那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的进程”。这就是程序员的事了
   --嗨! 大家好初次见面 我是老王滴小尾巴、很萌很萌哒、不要踩我哦~
2013年07月10日 01点07分 5
level 7
wlr11235 楼主
1.前台进程(foreground):目前正在屏幕上显示的进程和一些系统进程,
举例来说,当你再用客户端看我说废话,百度贴吧客户端属于前台进程(foreground),但一旦你按home回到主界面,客户端就变成了后台程序(background)。当然我们最不希望终止的进程就是前台进程。
2.可见进程(visible):可见进程是一些不再前台,但用户依然可见的进程,举个例来说:widget、输入法等,都属于visible。这部分进程虽然不在前台,但与我们的使用也密切相关,我们也不希望它们被终止,比如每次打字之前都会卡一下……
3.次要服务(secondary server):目前正在运行的一些服务(主要服务,如拨号等,是不可能被进程管理终止的,故这里只谈次要服务),举例来说:大名鼎鼎的gsm,谷歌企业套件,Gmail内部存储,联系人内部存储等。这部分服务虽然属于次要服务,但很一些系统功能依然息息相关,我们时常需要用到它们,所以也太希望他们被终止 4.后台进程(hidden):虽然说是hidden,但实际即是后台进程(background),就是我们通常意义上理解的启动后被切换到后台的进程,如浏览器,阅读器等。当程序显示在屏幕上时,他所运行的进程即为前台进程(foreground),一旦我们按home返回主界面(注意是按home,不是按back),程序就驻留在后台,成为后台进程(background)。
后台进程的管理策略有多种:有较为积极的方式,一旦程序到达后台立即终止,这种方式会提高程序的运行速度,但无法加速程序的再次启动;也有较消极的方式,尽可能多的保留后台程序,虽然可能会影响到单个程序的运行速度,但在再次启动已启动的程序时,速度会有所提升。这里就需要用户根据自己的使用习惯找到一个平衡点
5.内容供应节点(content provider):没有程序实体,进提供内容供别的程序去用的,比如日历供应节点,邮件供应节点等。在终止进程时,这类程序应该有较高的优先权
6.空进程(empty):没有任何东西在内运行的进程,有些程序,比如BTE,在程序退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息。这部分进程无疑是应该最先终止的。
   --嗨! 大家好初次见面 我是老王滴小尾巴、很萌很萌哒、不要踩我哦~
2013年07月10日 01点07分 6
level 8
O○。゜。o冒泡泡゜○。○゜。O°o○。o゜○。゜O○。°咕噜○o°○o○゜o。O゜○。゜。泡泡゜O○。°○o°○o○゜o。O゜○。゜。゜O○。°○o°○o○咕噜゜o。O゜○
2013年07月10日 23点07分 7
1