您的位置:首页 > 移动开发 > Android开发

Android线程优先级规定及其设置的具体方法

2016-04-08 17:32 337 查看
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); //设置线程优先级为后台,这样当多个线程并发后很多无关紧要的线程分配的CPU时间将会减少,有利于主线程的处理,有以下几种:

int THREAD_PRIORITY_AUDIO //标准音乐播放使用的线程优先级

int THREAD_PRIORITY_BACKGROUND //标准后台程序

int THREAD_PRIORITY_DEFAULT // 默认应用的优先级

int THREAD_PRIORITY_DISPLAY //标准显示系统优先级,主要是改善UI的刷新

int THREAD_PRIORITY_FOREGROUND //标准前台线程优先级

int THREAD_PRIORITY_LESS_FAVORABLE //低于favorable

int THREAD_PRIORITY_LOWEST //有效的线程最低的优先级

int THREAD_PRIORITY_MORE_FAVORABLE //高于favorable

int THREAD_PRIORITY_URGENT_AUDIO //标准较重要音频播放优先级

int THREAD_PRIORITY_URGENT_DISPLAY //标准较重要显示优先级,对于输入事件同样适用。

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种方法)设置的优先级,对线程调度影响显著.

------------------------------------------------

Java代码


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;

@Override
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();
}

@Override
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;
}

@Override
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());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: