android 线程优先级设置方法
16lz
2022-01-24
转载自 http://zengyan2012.iteye.com/blog/1228770
android.os.Process.setThreadPriority (int priority)或
android.os.Process.setThreadPriority (int tid, int priority)
priority:【-20, 19】,高优先级 -> 低优先级.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 多线程下载
- android之IntentService类的实现
- Android(安卓)Activity sleep 自线程更新主线程UI
- android studio 55[2]线程更新UI handler 2
- 浅析Android中的消息机制
- Android(安卓)为什么主线程的looper 一直循环不会ANR
- Android(安卓)多媒体录制
- Android(安卓)handler使用说明
- 十分钟让你了解Android触摸事件原理(InputManagerService)