Android 如何提高异步任务的优先级?

Android 如何提高异步任务的优先级?,android,android-asynctask,Android,Android Asynctask,有没有办法提高异步任务的优先级 我在一个异步任务中做一些图像处理。在速度非常慢的设备上,处理图像最多需要60秒。现在我想通过提高任务的优先级来提高性能。可以通过某种方式完成吗?尝试使用以下方法(增加优先级AsyncTask线程): 如果您没有一个繁重的UI,它会与异步任务执行流交错,那么您的问题在于所使用的算法 如果可以将算法划分为并行任务,那么就可以使用一个执行器池。如果不是,那么异步任务只是在做串行工作 请注意,根据: 首次引入时,异步任务是在单个后台线程上串行执行的。从DONUT开始,它被

有没有办法提高异步任务的优先级

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

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


如果您没有一个繁重的UI,它会与异步任务执行流交错,那么您的问题在于所使用的算法

如果可以将算法划分为并行任务,那么就可以使用一个执行器池。如果不是,那么异步任务只是在做串行工作

请注意,根据:

首次引入时,异步任务是在单个后台线程上串行执行的。从DONUT开始,它被更改为一个线程池,允许多个任务并行运行。从蜂巢开始,任务在单个线程上执行,以避免并行执行导致的常见应用程序错误

如果确实需要并行执行,可以使用线程池执行器调用executeOnExecutor(java.util.concurrent.Executor,Object[])

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

if (Build.VERSION.SDK_INT >= 11) {
    asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
    asyncTask.execute();
}

甚至可以创建自定义线程。

在异步任务
doInBackground
中设置线程优先级:

Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
例如:

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

首先压缩图像很遗憾,压缩图像不是一个选项。您想提高优先级。您是否有多个异步任务同时运行?一次只运行一个任务。为什么要将
final
添加到此方法?无法解析方法“setThreadPriority(int)”,该怎么办?它不会更改线程优先级!!虽然它有助于更快地运行
doInBackground
方法,但要更改线程优先级,请参阅公认的答案。。。因此,
executeOnExecutor
仅用于修复线程启动前的延迟
protected Object doInBackground(Integer... params) {
    Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
    ...
    ...
}