В исходном конструкторе асинхронных задач по умолчанию у нас есть следующий код, который устанавливает приоритет потока на 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;
}
};
Я создал пример приложения, в котором я создал простую асинхронную задачу, и в 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 и лог-оператор.