Android / Java序列的串行执行任务

时间:2015-02-23 20:30:12

标签: java android asynchronous concurrency android-asynctask

如何让一系列任务一个接一个地运行(Serrally)。我没有使用AsyncTasks,而是loopj AsyncHttpClient,但这个问题也适用于其他任务。

它的结构方式是:Application有执行多个异步调用的main方法。这些调用是相互串行的,必须一个接一个地运行。

  • Main()调用FuncA()会触发异步请求。控件返回Main()
  • 请求处理程序调用{​​{1}},触发OnFuncAComplete()继续:
  • Main()调用Main()会触发异步请求。控件返回FuncB()
  • 请求处理程序调用{​​{1}},触发Main()继续:
  • 冲洗,重复

如何编写main以锁定步骤执行所有这些功能,如何暂停OnFuncBComplete()并在Main()“触发”主要恢复操作?我的第一个想法是ReentrantLock,但我似乎无法让它发挥作用。

编辑:我知道我可以从Main()拨打OnFuncXComplete,但后来我陷入了回调地狱,我想尽可能避免。

2 个答案:

答案 0 :(得分:0)

看起来可能有多个解决方案。一种可能性是使用SynchronousQueue在Main和处理器之间传输任务。可能不需要AsyncTask,而是你的任务可以扩展runnables而不需要回调来“解锁”Main()

  1. 创建一个运行循环的处理线程并轮询SynchronousQueue实例(可能带有超时)。从队列中获取的每个元素都是处理器线程刚刚执行的Runnable。
  2. 在您的Main()中依次调用FuncA(SynchronousQueue q,< ...>),FuncB(SynchronousQueue q,< ...>)等
  3. 每个FuncX()都将其可运行任务插入队列(q)
  4. 确保一旦没有更多任务可以运行,就可以很好地完成你的线程

答案 1 :(得分:0)

看看IntentService。它是一个Worker服务,只有一个bg线程,请求以FCFS方式排队和处理。服务到您的主页的回复可以通过您的主管事先应该注册的BroadcastReceiver来传递。