串行执行多个AsyncTasks

时间:2011-07-31 16:26:28

标签: android android-asynctask android-2.2-froyo executor

有谁知道如何轻松地安排多次调用队列中的AsyncTask执行,然后以串行方式执行它们?

我希望被调用的异步任务在它完成之前等待,但似乎我无法完成此任务,即使我测试当前正在执行的任务的状态。

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

谢谢!

3 个答案:

答案 0 :(得分: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。

我使用右键单击源包名称并选择New / Class来创建intentservice。我使用intentservice作为超类。构造函数有一个“名称”的争论。我改成了:

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

该服务的所有代码都进入了onHandleIntent函数。我没有必要使用任何其他@Override函数。

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

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

答案 1 :(得分:1)

大于Honeycomb的Android版本已将Asynctask的默认执行程序作为串行执行程序。所以如果你的分钟。 SDK版本和目标SDK版本超过12,Asynctasks将根据其执行函数的调用执行。请参阅我在

上关于Asynctask的讨论
  

https://docs.google.com/document/d/1_zihWXAwgTAdJc013-bOLUHPMrjeUBZnDuPkzMxEEj0/edit?usp=sharing

希望这可以帮助你...

答案 2 :(得分:0)

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