的串行执行有谁知道如何轻松地安排在队列或东西的执行的AsyncTask多个呼叫,然后以串行方式执行呢?多个AsyncTasks
我想所谓的异步任务等待一段时间之前,它已经完成,但是是一个好像我不能做到这一点,即使我测试目前正在执行的一个状态。
任何想法如何解决这个问题?我已经看到在蜂窝API中有一个方法executeOnExecutor()
与SERIAL_EXECUTOR
,我想它实现了我所描述的。但是,我并没有开发蜂窝。
谢谢!
的串行执行有谁知道如何轻松地安排在队列或东西的执行的AsyncTask多个呼叫,然后以串行方式执行呢?多个AsyncTasks
我想所谓的异步任务等待一段时间之前,它已经完成,但是是一个好像我不能做到这一点,即使我测试目前正在执行的一个状态。
任何想法如何解决这个问题?我已经看到在蜂窝API中有一个方法executeOnExecutor()
与SERIAL_EXECUTOR
,我想它实现了我所描述的。但是,我并没有开发蜂窝。
谢谢!
您可能会尝试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是定义额外密钥的全局字符串。
我会这样做,有一个数组或队列或计数器的次数要执行AsyncTAsk(相同类的AsyncTask或不同的类)在一个活动中,在AsyncTask,onPostExecute(),递减计数器(或类似的数据结构)并再次调用AsyncTask。
嗯,我已经尝试了类似的onPostExecute()中更改的标志,但问题是,我希望队列中的最后一个任务在前一个完成后专门执行,并且计数器的递减或改变的旗帜显然没有达到这个目标。 – dulys
大于Honeycomb的Android版本已将Asynctask的默认执行程序作为串行执行程序。所以,如果你的分钟。 SDK版本和目标SDK版本大于12,Asynctasks将根据其执行函数的调用执行。见我在讨论的AsyncTask在
https://docs.google.com/document/d/1_zihWXAwgTAdJc013-bOLUHPMrjeUBZnDuPkzMxEEj0/edit?usp=sharing
希望这有助于你...
AsyncTask看起来对我的任务来说非常完美(将文件上传到服务器),这是对我的串扰。我可以尝试使用服务,但我认为AsyncTask是最好的方式,因为它灵活且在活动 – dulys
中重复调用。intentservice的目的之一是上载/下载文件。它可以被重复调用。序列化的是来自活动的调用。基本上,它是用于你刚才所说的一切。 –
它像一个魅力,非常感谢! – dulys