【问题标题】:How to do more than one AsyncTask one after another?如何一个接一个地做多个AsyncTask?
【发布时间】:2014-08-04 04:28:29
【问题描述】:

假设我有两个 AsyncTask。 AsyncTask_A 和 AsyncTask_B。 我只想在 AsyncTask_A 完全完成时执行 AsyncTask_B 。 我知道我可以在 AsyncTask_A 的 postExecute() 方法中执行 AsyncTask_B。 但是..有没有更好的方法?

【问题讨论】:

  • 这篇文章可能对你有所帮助:stackoverflow.com/questions/7494515/…
  • 如果您的目标是 Honeycomb 或更高版本,这已经是默认行为 - 所有 AsyncTasks 都将按顺序执行。

标签: android multithreading android-asynctask


【解决方案1】:

在这种情况下,您应该创建一个充当单例的类,该类将处理这些任务的排队(即其中的 AsyncTask 列表),它跟踪是否有任何正在运行,如果有,则将它们排队。然后在这些任务的 postExecute() 中,都应该回调到队列对象以通知它们它们已完成,然后在此回调中它应该运行下一个 AsyncTask。

这将允许您:

  1. 调用 AsyncTaskA 而不必总是运行 AsyncTaskB(移除硬依赖)
  2. 添加更多 AsyncTasks,因为管理这些任务的依赖是在队列对象上,而不是在 AsyncTasks 中

【讨论】:

  • 对不起,我不完全明白你想说因为我很笨。有什么例子吗?
【解决方案2】:
Queue<ASyncTask> q;
AsyncTask_A async_a;
AsyncTask_B async_b;
q.add(async_a);
q.add(async_b);

while(!q.empty)
{
  AsyncTask task = q.pop();
  task.execute();
  while(task.isRunning())
  {
    Thread.sleep(SOME_MILLISECONDS) // You can use wait and notify here.instead of sleep
  }
}

【讨论】:

  • 我认为 AsyncTask 对象中没有 isRunning()。
  • 是的。我只是想给出伪代码。意味着一些标志将决定任务是否仍在运行或完成。
  • if(task.getStatus()==AsyncTask.Status.RUNNING) 可以使用。但这使我的应用程序冻结。时间似乎永远不会停止。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
相关资源
最近更新 更多