有谁知道如何轻松地安排对队列中的 AsyncTask 执行的多个调用或其他东西,然后以串行方式执行它们?
我希望被调用的异步任务在完成之前等待,但似乎我无法完成这一点,即使我测试了当前正在执行的任务的状态。
任何想法如何解决这个问题?我已经看到在蜂窝 API 中有一个executeOnExecutor()
带有 a的方法SERIAL_EXECUTOR
,我想它实现了我所描述的。但是,我不是为蜂窝开发的。
谢谢!
有谁知道如何轻松地安排对队列中的 AsyncTask 执行的多个调用或其他东西,然后以串行方式执行它们?
我希望被调用的异步任务在完成之前等待,但似乎我无法完成这一点,即使我测试了当前正在执行的任务的状态。
任何想法如何解决这个问题?我已经看到在蜂窝 API 中有一个executeOnExecutor()
带有 a的方法SERIAL_EXECUTOR
,我想它实现了我所描述的。但是,我不是为蜂窝开发的。
谢谢!
你可以试试 IntentService。从参考:
IntentService 是按需处理异步请求(表示为 Intent)的服务的基类。客户端通过 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)
它像宣传的那样工作。请求序列化得很好。该服务在收到请求时启动。服务在处理完最后一个请求后停止。请求被先进先出处理。
我使用右键单击源包名称并选择 New/Class 创建了 intentservice。我使用 intentservice 作为超类。构造函数有一个“名称”的争论。我将其更改为:
public XxxService() {super("XxxService");}
该服务的所有代码都进入了 onHandleIntent 函数。我不必使用任何其他 @Override 函数。
希望这是你想要的...
注意:变量'context'是onReceive中传递的参数。我将代码中的名称从 XxxxService 更改为“服务”或“服务”。最后,我在所有项目中创建了一个名为 GC 的类。它是全局常量的容器类。GC.EXTRA_SERVICE_DATA 是定义额外键的全局字符串。
高于 Honeycomb 的 Android 版本已将 Asynctask 的默认执行器设为串行执行器。所以,如果你的分钟。SDK版本和目标SDK版本大于12,Asynctasks会按照其execute函数的调用执行。请参阅我在 Asynctask 上的讨论
https://docs.google.com/document/d/1_zihWXAwgTAdJc013-bOLUHPMrjeUBZnDuPkzMxEEj0/edit?usp=sharing
希望这可以帮助你...
我会这样做,有一个数组或队列或计数器,您想在活动中执行 AsyncTAsk(AsyncTask 的同一类或不同类)的次数,在 AsyncTask 中,onPostExecute(),递减计数器(或类似数据结构)并再次调用 AsyncTask。