运行多个AsyncTasks:任务.executeOnExecutor不工作



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

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

我在我的ElevatorControl类(这不是一个活动)中执行这个。有趣的是:executeOnExecutor没有启动任务的doInBackground方法。我尝试使用日志进行调试,就像这样(在我的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上,这意味着它没有运行。试着像这样捕捉executeonexecutor返回的状态变量(我的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();

,通过调试,我发现这个Status是"running"。为什么它不运行我的任务的doInBackground方法?

谁能告诉我我做错了什么?

注::我在我的项目中使用了很多asyncTasks,至少运行了18个,因为我的老师这么说。

首先,Android有线程和AsyncTask的限制。所有的asynctask都是由一个共享的(静态的)ThreadPoolExecutor和一个LinkedBlockingQueue控制的。当你在AsyncTask上调用execute时,ThreadPoolExecutor将在将来的某个时间准备好时执行它。"

在这篇文章:Android AsyncTask线程限制?

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

问候。

相关内容

  • 没有找到相关文章

最新更新