如何提升AsyncTask的优先级?

SeP*_*läm 6 android android-asynctask

有没有办法提升AsyncTask的优先级?

我正在AsyncTask中进行一些图像处理.在速度非常慢的设备上,处理图像最多需要60秒.现在,我想通过提升任务的优先级来提高性能.能以某种方式完成吗?

Bar*_*ica 12

尝试使用以下(增加优先级AsyncTask线程):

protected final MyResult doInBackground(MyInput... myInput) {
    Process.setThreadPriority(THREAD_PRIORITY_BACKGROUND + THREAD_PRIORITY_MORE_FAVORABLE);
    // blah-blah
}
Run Code Online (Sandbox Code Playgroud)


Rad*_*scu 7

如果您没有与AsyncTask执行流交错的重UI,那么您的问题就在于所使用的算法.

如果您可以将算法划分为并行任务,则可以使用执行程序池.如果没有,您的异步任务就是执行连续工作.

请注意,根据AsyncTask:

首次引入时,AsyncTasks在单个后台线程上串行执行.从DONUT开始,这被改为一个线程池,允许多个任务并行运行.从HONEYCOMB开始,任务在单个线程上执行,以避免由并行执行引起的常见应用程序错误.

如果您真的想要并行执行,可以使用THREAD_POOL_EXECUTOR调用executeOnExecutor(java.util.concurrent.Executor,Object [])

您可以在大多数设备上使用这样的代码

if (Build.VERSION.SDK_INT >= 11) {
    asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
    asyncTask.execute();
}
Run Code Online (Sandbox Code Playgroud)

甚至创建一个自定义 ThreadPoolExecutor.