android 线程优先级设置方法

转载自 http://zengyan2012.iteye.com/blog/1228770

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

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

你可能感兴趣的:(android)