Android 设置线程优先级
2016-06-22 本文已影响2651人
zoudaokou2006
设置线程的优先级
方法一:android.os.Process.setThreadPriority
android.os.Process.setThreadPriority (int priority);
android.os.Process.setThreadPriority (int tid, int priority);
priority:【-20, 19】,高优先级 -> 低优先级。
方法二:java.lang.Thread.setPriority
java.lang.Thread.setPriority (int priority)
priority:【1, 10】,低优先级 -> 高优先级。
测试后发现,使用方法一(android.os.Process.setThreadPriority )设置优先级,对线程调度影响显著。
测试代码
package com.test.testx;
import android.app.Activity;
import android.os.Bundle;
import android.os.Process;
import android.util.Log;
public class TestThreadPriority extends Activity {
private static final String TAG ="TestThreadPriority";
private boolean mNeedExit = false;
@Overridepublic void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyThread a = new MyThread("Thread A");
a.setOSPriority(Process.THREAD_PRIORITY_LOWEST); // 19
a.setPriority(Thread.MAX_PRIORITY); // 10
MyThread b = new MyThread("Thread B");
b.setOSPriority(Process.THREAD_PRIORITY_URGENT_AUDIO); // -19
b.setPriority(Thread.MIN_PRIORITY); // 1
a.start();
b.start();
}
@Overridepublic void onBackPressed() {
mNeedExit = true;
super.onBackPressed();
}
private class MyThread extends Thread {
private int mOSPriority = Process.THREAD_PRIORITY_DEFAULT;
private int mLoopCount = 0;
public MyThread(String threadName) {
super(threadName);
}
public void setOSPriority(int p) {
mOSPriority = p;
}
@Overridepublic void run() {
Process.setThreadPriority(mOSPriority);
while(!mNeedExit) {
mLoopCount ++;
Math.log(Math.random() * 1000); // calculation test
Log.d(TAG, new StringBuilder().append(getName())
.append(" os priority: ").append(mOSPriority)
.append(" java priority: ").append(getPriority())
.append(" loop count: ").append(mLoopCount).toString());
}
Log.d(TAG, new StringBuilder().append(getName()).append(" exiting...")
.append(" os priority: ").append(mOSPriority)
.append(" java priority: ").append(getPriority())
.append(" loop count: ").append(mLoopCount).toString());
}
}
}