控制执行AsyncTaks

时间:2015-10-14 15:14:24

标签: java android multithreading android-asynctask java-threads

我有一个for循环,可以创建几个AsyncTasks。存在大量data,for循环处理每个数据并使用该数据调用执行程序。 AsyncTask对该数据进行了一些密集处理,这些代码对于小型数据集非常适用,即数据阵列足够小,不会创建太多的线程。

for(Data datum: data)
{
    new SomeAsyncDataTask(datum, this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}

然而,事实上数据是巨大的,因此在生产中运行它,即在实际的Android设备上运行崩溃应用程序由于太多线程与RejectedExecutionException。此外,还有一个UI表单,用户可以通过该表单提供数据并手动调用相同的SomeAsyncDataTask AsyncTask类。

我正在寻找一种解决方案,通过限制5个AsyncTasks一次运行来控制此执行,任何其他任务必须排队。此外,当用户发送任务时,如果队列有任何非运行排队任务,我宁愿将此用户任务放在最顶层,这样当正在运行的任务完成时,此任务将有机会运行,其他任务只会到来后来。谷歌搜索向我展示了一些结果;就像有一个名为PriorityBlockingQueue的东西,但看着代码让我困惑。这是一个解决方案吗?如果是这样,如何在这种情况下使用它(对于上面的代码)。请提出解决方案 - 谢谢!

1 个答案:

答案 0 :(得分:2)

您应该使用ExecutorService来实现此目的。

ExecutorService executorService = Executors.newFixedThreadPool(5);

new MyAsyncTask()。executeOnExecutor(executorService);