AsyncTask不能保持Object足够快?

时间:2015-02-04 09:03:06

标签: android multithreading reference android-asynctask

我基本上是通过向其推送几个意图来启动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的相同值。

1 个答案:

答案 0 :(得分:1)

为什么要在AsyncTask中启动Service?

从你的代码中,foreach循环不会等待AsyncTask的doInBackground,因为它不在同一个线程上,你需要为每个AsyncTask创建一个新的意图。