【发布时间】:2020-02-10 21:12:10
【问题描述】:
在默认的异步任务构造函数源中,我们有以下代码,它将线程优先级设置为Process.THREAD_PRIORITY_BACKGROUND = 10
mWorker = new WorkerRunnable<Params, Result>() {
public Result call() throws Exception {
mTaskInvoked.set(true);
Result result = null;
try {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
//noinspection unchecked
result = doInBackground(mParams);
Binder.flushPendingCommands();
} catch (Throwable tr) {
mCancelled.set(true);
throw tr;
} finally {
postResult(result);
}
return result;
}
};
我创建了一个示例应用程序,在其中创建了简单的 asynctask,并在 doInBackground() 中通过
记录线程优先级Log.d("@@@ AsyncTask", "Thread name = " + Thread.currentThread().getName() + "Tread priority " + Thread.currentThread().getPriority());
预期结果:
com.example.myapplication D/@@@ AsyncTask: Thread name = AsyncTask #1Tread priority 10
实际结果:
com.example.myapplication D/@@@ AsyncTask: Thread name = AsyncTask #1Tread priority 5
后台线程的线程优先级与主线程优先级相同
com.example.myapplication D/@@@ MainActivity onCreate: Thread name = mainTread priority 5
我已经在 API 19 和 API 26 上对此进行了测试。结果是一样的。
为什么异步任务中没有应用后台线程优先级? 还是我阅读优先级的方法不对?
我可以将资源上传到 github,但上传的内容不多。只有 AsyncTask 和 log 语句。
【问题讨论】:
标签: android multithreading android-asynctask thread-priority