Android在线程方面主要使用的是Java本身的Thread类:
java.lang.Thread.setPriority(intpriority)
public final voidsetPriority (int priority)
我们可以在Thread或Runnable接口中的run方法首句加入
Process.setThreadPriority(Process.***); ( *** 取值范围: -20 --- 19 )
合理的设置优先级这样当多个线程并发后很多无关紧要的线程分配的CPU时间将会减少,有利于主线程的处理,相关的Thread优先级定义罗列有以下几种:
int THREAD_PRIORITY_AUDIO //标准音乐播放使用的线程优先级 -16
intTHREAD_PRIORITY_BACKGROUND //标准后台程序 10
int THREAD_PRIORITY_DEFAULT// 默认应用的优先级 0
int THREAD_PRIORITY_DISPLAY//标准显示系统优先级,主要是改善UI的刷新 -4
intTHREAD_PRIORITY_FOREGROUND //标准前台线程优先级 -2
intTHREAD_PRIORITY_LESS_FAVORABLE //低于favorable 1
int THREAD_PRIORITY_LOWEST //有效的线程最低的优先级 19
intTHREAD_PRIORITY_MORE_FAVORABLE //高于favorable -1
intTHREAD_PRIORITY_URGENT_AUDIO //标准较重要音频播放优先级 -19
intTHREAD_PRIORITY_URGENT_DISPLAY //标准较重要显示优先级(输入事件也适用)。-8
例如:MediaProvider 的优先级是 11
// MediaScannerService.java
public void run()
{
// reduce priority below otherbackground threads to avoid interfering
// with other services at boot time.
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND +
Process.THREAD_PRIORITY_LESS_FAVORABLE); // 10 + 1 = 11
Looper.prepare();
//这样当有优先级比11大的进程和MediaProvider同时工作时,MediaProvider抢占CPU的能力就会大大降低。