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

更多相关文章

  1. android 多线程下载
  2. android之IntentService类的实现
  3. Android(安卓)Activity sleep 自线程更新主线程UI
  4. android studio 55[2]线程更新UI handler 2
  5. 浅析Android中的消息机制
  6. Android(安卓)为什么主线程的looper 一直循环不会ANR
  7. Android(安卓)多媒体录制
  8. Android(安卓)handler使用说明
  9. 十分钟让你了解Android触摸事件原理(InputManagerService)

随机推荐

  1. android 安装apk包 卸载 包
  2. Android 使用CoordinatorLayout+AppBarLa
  3. [Android] Fastest Way to Get on Track
  4. android studio SDK版本的调节
  5. android中ScrollView中TextView无法铺满
  6. "equals"和"=="的区别
  7. android 复制信息内容到剪切板 (2011-12-
  8. Android存储访问目录
  9. Android 4.2 setContentView 流程研究分
  10. [置顶] android中加载图片