加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

随笔之Android平台上的进程调度分析

发布时间:2021-12-15 11:34:01 所属栏目:教程 来源:互联网
导读:一由来 最近在翻阅MediaProvider的时候,突然想起之前碰到的一个问题,该问题是这样的: 一个Pad上有很多媒体文件,然后每次开机后的一段时间内,Home Screen的反应都特别慢,有时候还会报出ANR的错误。从ANR文件/data/anr/traces.txt分析,发现系统打印的cp

一由来
 
最近在翻阅MediaProvider的时候,突然想起之前碰到的一个问题,该问题是这样的:
 
一个Pad上有很多媒体文件,然后每次开机后的一段时间内,Home Screen的反应都特别慢,有时候还会报出ANR的错误。从ANR文件/data/anr/traces.txt分析,发现系统打印的cpu占有率中,Android.process.media占用非常高。所以怀疑是MediaProvider做文件扫描占用CPU太多资源导致。
 
但是我们实际测试的时候,通过top –m 5查看cpu占有率的时候,发现只要一操作Home,android.process.media进程cpu占有率就会下降很多。
 
当时看到这个现象,直观感觉就是MediaProvider抢占CPU能力不够。直接把该现象告诉领导,这个事情也就结了。但是一直没在代码中找到依据:总有地方设置进程的优先级吧??
 
后来,时间充裕了,想起这个问题。果不其然,在MediaScannerService中,找到答案:
 
public void run()  
{  
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND +  
                Process.THREAD_PRIORITY_LESS_FAVORABLE);  
     ……  
}  
上面代码显示得将本进程的优先级设置为BACKGROUND+LESS_FAVORABLE。
 
那么这个优先级是什么呢?
 
本随笔将关注两个问题:
 
Android平台提供的调度接口及其它的实现
调度一定是依靠Linux OS的,那么本随笔也会顺便介绍一下Linux OS中的进程调度相关的知识。
 
二 Android平台中的进程调度接口
 
从最上的Java层看,Anroid提供的Process类封装了进程调度优先级,调度策略等一些API。下图是整体调用流程和相关文件位置。
 
 
 
 
 
 
 
图1 进程调度的API以及调用分发流程
 
从上图我们可知:
 
重点讨论Process.java提供的setThreadPriority和setThreadGroup函数。
调用分发顺序从Java一直贯穿JNI,Native层后,setThreadPriority直接转移到setpriority系统调用,而setThreadGroup通过set_sched_policy处理后,再转移给sched_setscheduler系统调用。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读