我基本上是通过向其推送几个意图来启动AsyncTask
for (int key:mappedKeys){
fireIntent.putExtra(LEDIntentService.keyID, key);
new AsyncStartService().execute(fireIntent);
}
但问题是,keyID
的Intent并不总是调用execute()
时的那个。
在解雇之前克隆它会修复它,但也会减慢它的速度。
在Task或Runnable中使用mappedKeys
对我来说别无选择。
这是AsyncTask的行为吗?
protected class AsyncStartService extends AsyncTask<Intent,Void, Void>{
@Override
protected Void doInBackground(Intent... params) {
for (int i = 0, paramsLength = params.length; i < paramsLength; i++) {
Intent param = params[i];
startService(param);
}
return null;
}
}
它有更多的代码,但这个最小的片段不起作用。
似乎foreach在第一个参数被激活之前完成,然后所有项目都具有keyID
的相同值。
答案 0 :(得分:1)
为什么要在AsyncTask中启动Service?
从你的代码中,foreach循环不会等待AsyncTask的doInBackground,因为它不在同一个线程上,你需要为每个AsyncTask创建一个新的意图。