如何提升AsyncTask的优先级?

时间:2016-02-03 07:05:56

标签: android android-asynctask

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

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

3 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:7)

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

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

根据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();
}

甚至可以创建自定义ThreadPoolExecutor

答案 2 :(得分:0)

在AsyncTask doInBackground中设置线程优先级:

Thread.currentThread().setPriority(Thread.MAX_PRIORITY);

喜欢以下内容:

protected Object doInBackground(Integer... params) {
    Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
    ...
    ...
}