从android.os.AsyncTask借用源代码并制作您自己的 com.company.AsyncTask 实现,您可以在自己的代码中控制您想要的一切。
android.os.AsyncTask 带有两个现成的执行器,THREAD_POOL_EXECUTOR 和 SERIAL_EXECUTOR:
private static final BlockingQueue<Runnable> sPoolWorkQueue =
new LinkedBlockingQueue<Runnable>(10);
/**
* An {@link Executor} that can be used to execute tasks in parallel.
*/
public static final Executor THREAD_POOL_EXECUTOR
= new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,
TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);
/**
* An {@link Executor} that executes tasks one at a time in serial
* order. This serialization is global to a particular process.
*/
public static final Executor SERIAL_EXECUTOR = new SerialExecutor();
在您的 com.company.AsyncTask 中,创建另一个 PRIORITY_THREAD_POOL_EXECUTOR 并将您的所有实现包装在此类中(您可以看到所有内部字段),并像这样使用您的 AysncTask:
com.company.AsyncTask asyncTask = new com.company.AsyncTask();
asyncTask.setPriority(1);
asyncTask.executeOnExecutor(com.company.AsyncTask.PRIORITY_THREAD_POOL_EXECUTOR, (Void[]) null);
在这里查看我的答案,看看我如何创建自己的 AsyncTask 以使 executeOnExecutor() 在 API 级别 11 之前工作。