运行多个AsyncTasks:task.executeOnExecutor无法正常工作

时间:2015-06-04 15:32:25

标签: android multithreading android-asynctask

我有一个大学项目,我需要使用线程来运行paralel中的任务。我开始使用AsyncTask和简单的task.execute(params),但后来我发现这不允许多个Asynctasks运行,每次只运行一次。 然后我发现了task.executeOnExecutor,我这样使用(我的ElevatorControl类中的代码):

taskDesligaLampada.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "");

我在ElevatorControl类中执行它(这不是一个活动)。有趣的是:executeOnExecutor没有启动任务的doInBackground方法。我尝试使用Logging for debuggig(在我的AsyncTask中):

@Override
protected String doInBackground(String... string_qualquer) 
{
    //PAREI AKI PARECE QUE ESSA TASK NÃO EXECUTA. PROBLEMA DO EXECUTE ON EXECUTOR?
    Log.i("ElevatorControl", "Elevador id=" + elevatorControl.getIdElevador() + ";fechando porta");
    this.interfaceDaPorta.fecharPorta(andarAtual, this.elevatorControl.getIdElevador());
    return "";
}

但日志没有出现在logCat上,这意味着它没有运行。尝试捕获像executteOnExecutor之后返回的State变量(我的ElevatorControl任务中的方法):

//os eventos abaixo deveriam ser concorrentes. Por isso as tasks foram criadas
    TaskFechaPorta taskFechaPorta = new TaskFechaPorta(this, interfaceDaPorta, sobeOuDesceOuParado, andarAtual);
    Status statusThreadRoda = taskFechaPorta.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "").getStatus();

并且,通过调试,我发现这个状态是“正在运行”。为什么它没有运行我的任务的doInBackground方法?

任何人都可以说我做错了吗?

P.S。:我为我的项目使用了很多asyncTasks,至少18次运行,因为我的老师这么说。

1 个答案:

答案 0 :(得分:1)

首先,Android有Threads和AsyncTask的限制。 "所有AsyncTasks由共享(静态)ThreadPoolExecutor和LinkedBlockingQueue在内部控制。当你在AsyncTask上调用execute时,ThreadPoolExecutor会在将来某个时候准备就绪时执行它。"

在这篇文章中:Android AsyncTask threads limits?

你的Android版本是什么?此功能仅在Honeycomb之后可用。

问候。