2011-07-31 26 views
3

的串行执行有谁知道如何轻松地安排在队列或东西的执行的AsyncTask多个呼叫,然后以串行方式执行呢?多个AsyncTasks

我想所谓的异步任务等待一段时间之前,它已经完成,但是是一个好像我不能做到这一点,即使我测试目前正在执行的一个状态。

任何想法如何解决这个问题?我已经看到在蜂窝API中有一个方法executeOnExecutor()SERIAL_EXECUTOR,我想它实现了我所描述的。但是,我并没有开发蜂窝。

谢谢!

回答

3

您可能会尝试IntentService。来自参考:

IntentService是一个服务的基类,用于按需处理异步请求(表示为Intents)。客户通过startService(Intent)调用发送请求;该服务根据需要启动,使用工作线程轮流处理每个Intent,并在其停止工作时自行停止。

我从广播接收器运行服务如下:

// Now let the service module do the rest 

    Intent serviceIntent = new Intent(context, Service.class); 
    serviceIntent.putExtra(GC.EXTRA_SERVICE_DATA, serviceData); 
    ComponentName compName = context.startService(serviceIntent) 

它的工作作为标榜。请求序列化正常。服务在收到请求时开始。服务在上次请求处理后停止。这些请求被处理为FIFO。

我使用的源码包名右键,选择新建/类创建的intentservice。我使用intentservice作为超类。构造函数有一个“名称”的争论。我将其更改为:

public XxxService() {super("XxxService");} 

服务的所有代码都放到了onHandleIntent函数中。我不必使用任何其他@Override函数。

希望这是你想要的东西......

注:变量“语境”中的onReceive传递的参数。我将代码中的名称从XxxxService更改为“服务”或“服务”。最后,我在所有名为GC的项目中创建一个类。它是全局常量的容器类。 GC.EXTRA_SERVICE_DATA是定义额外密钥的全局字符串。

+0

AsyncTask看起来对我的任务来说非常完美(将文件上传到服务器),这是对我的串扰。我可以尝试使用服务,但我认为AsyncTask是最好的方式,因为它灵活且在活动 – dulys

+0

中重复调用。intentservice的目的之一是上载/下载文件。它可以被重复调用。序列化的是来自活动的调用。基本上,它是用于你刚才所说的一切。 –

+0

它像一个魅力,非常感谢! – dulys

0

我会这样做,有一个数组或队列或计数器的次数要执行AsyncTAsk(相同类的AsyncTask或不同的类)在一个活动中,在AsyncTask,onPostExecute(),递减计数器(或类似的数据结构)并再次调用AsyncTask。

+0

嗯,我已经尝试了类似的onPostExecute()中更改的标志,但问题是,我希望队列中的最后一个任务在前一个完成后专门执行,并且计数器的递减或改变的旗帜显然没有达到这个目标。 – dulys