有没有办法提升AsyncTask的优先级?
我正在AsyncTask中进行一些图像处理。在速度非常慢的设备上,处理图像最多需要60秒。现在,我想通过提升任务的优先级来提高性能。能以某种方式完成吗?
答案 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);
...
...
}