当前位置: 代码迷 >> Android >> android 设立线程的优先级
  详细解决方案

android 设立线程的优先级

热度:23   发布时间:2016-05-01 17:01:29.0
android 设置线程的优先级
有两处API可以设置线程的优先级:

(1)android.os.Process.setThreadPriority (int priority)
android.os.Process.setThreadPriority (int tid, int priority)

priority:【-20, 19】,高优先级 -> 低优先级。

(2)java.lang.Thread.setPriority (int priority)

priority:【1, 10】,低优先级 ->?高优先级。

测试后发现,使用android自己的API(第1种方法)设置的优先级,对线程调度影响显著。

=====================
测试代码如下:
=====================
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;

?? [email protected]
?? ?public 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();
?? ?}

?? [email protected]
?? ?public 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;
?? ? }

?? [email protected]
?? ?public 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());
?? ??? ?}
?? ?}
}
  相关解决方案