我有一个大学项目,我需要使用线程并行运行任务。我开始使用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之后可用。
问候。