随笔之Android平台上的进程调度探讨

2014-11-24 11:47:41 · 作者: · 浏览: 13

一由来


最近在翻阅MediaProvider的时候,突然想起之前碰到的一个问题,该问题是这样的:


但是我们实际测试的时候,通过top –m 5查看cpu占有率的时候,发现只要一操作Home,android.process.media进程cpu占有率就会下降很多。


当时看到这个现象,直观感觉就是MediaProvider抢占CPU能力不够。直接把该现象告诉领导,这个事情也就结了。但是一直没在代码中找到依据:总有地方设置进程的优先级吧??


后来,时间充裕了,想起这个问题。果不其然,在MediaScannerService中,找到答案:


上面代码显示得将本进程的优先级设置为BACKGROUND+LESS_FAVORABLE。


那么这个优先级是什么呢?


本随笔将关注两个问题:


Android平台提供的调度接口及其它的实现
调度一定是依靠Linux OS的,那么本随笔也会顺便介绍一下Linux OS中的进程调度相关的知识。


二 Android平台中的进程调度接口


从最上的Java层看,Anroid提供的Process类封装了进程调度优先级,调度策略等一些API。下图是整体调用流程和相关文件位置。





图1 进程调度的API以及调用分发流程


从上图我们可知: