我有一个大学项目,我需要使用线程来运行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次运行,因为我的老师这么说。
答案 0 :(得分:1)
首先,Android有Threads和AsyncTask的限制。 "所有AsyncTasks由共享(静态)ThreadPoolExecutor和LinkedBlockingQueue在内部控制。当你在AsyncTask上调用execute时,ThreadPoolExecutor会在将来某个时候准备就绪时执行它。"
在这篇文章中:Android AsyncTask threads limits?
你的Android版本是什么?此功能仅在Honeycomb之后可用。
问候。