????????????????MediaProvider?????????????????????????????????????????

???????Pad???к??y????????????ο???????????????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????????????????????????????????????????????????????????????????е?????y??????????????

????????????????????????????????????????MediaScannerService?У????????

public void run????
{
Process.setThreadPriority??Process.THREAD_PRIORITY_BACKGROUND +
                Process.THREAD_PRIORITY_LESS_FAVORABLE??;
     ……
}
???????????????y??????????????????BACKGROUND+LESS_FAVORABLE??

??????????????????????

?????????????????????

?????? Android?????????????????????

?????? ?????????????Linux OS???????????????????????Linux OS?е???????????????

????????Android???е?????????

?????????Java????Anroid????Process????????????????????????????ЩAPI?????????????????????????λ?á?

?????????????????

?????? ???????Process.java????setThreadPriority??setThreadGroup??????

?????? ???÷??????Java????JNI??Native???setThreadPriority???????setpriority?????????setThreadGroup???set_sched_policy???????????sched_setscheduler?????á?

????2.1 ????????????

????????????????????????ò?????????????

????OS????????????????????????????????????????CPU??????????????????????????CPU?????????????????????????????η??????OS?????

???????????????androidSetThreadPriority??????

int androidSetThreadPriority??pid_t tid?? int pri??
{
??if defined??HAVE_PTHREADS??  //???????POSIX
//phtread_once????????????????????????Σ???????Class??constructor??
//checkDoSchedulingGroup???????ú????ж????????????”debug.sys.noschedgroups”
    pthread_once??&gDoSchedulingGroupOnce?? checkDoSchedulingGroup??;
    if ??gDoSchedulingGroup?? {
        if ??pri >= ANDROID_PRIORITY_BACKGROUND?? {
            //????????????????????????????
            rc = set_sched_policy??tid?? SP_BACKGROUND??;
        } else if ??getpriority??PRIO_PROCESS?? tid?? >= ANDROID_PRIORITY_BACKGROUND?? {
            rc = set_sched_policy??tid?? SP_FOREGROUND??;
        }
    }
  ……
   //??????????????
   if ??setpriority??PRIO_PROCESS?? tid?? pri?? < 0?? {
        rc = INVALID_OPERATION;
}
……
}