如何在不执行后执行链接的情况下同步运行异步任务?

时间:2015-03-05 11:33:10

标签: java android multithreading concurrency android-asynctask

我有三个异步任务,我希望能够同步运行它们。如果不将它们放在彼此的onPostExecute中,我怎么能这样做呢?我很抱歉,如果已经涵盖了这一点,但我似乎无法在谷歌或此处获得正确的关键词。

new parseZip().execute();
new loadContent().execute();
new playContent().execute();

任何帮助将不胜感激,或只是一个线程的链接

由于

2 个答案:

答案 0 :(得分:3)

  

我希望能够同步运行它们。我怎样才能做到这一点   没有把它们放在onPostExecute中吗?

为三个单独的任务创建自己的线程,并将它们同步以串行执行。见here。这张幻灯片的作者还写了一本关于Android中多线程的书。

另见Specifying the Code to Run on a Thread示例。

除此之外,默认情况下AsyncTask是串行运行的。如果我是你,我只需将它们放在彼此的onPostExecute()中。那有什么不对?

答案 1 :(得分:1)

您可以使用AsyncTask查询getStatus()的状态,以检查给定任务是否已结束,然后启动其他任务,但这意味着要不断检查wach任务的状态这不是一个好主意。

正如你所说,你也可以在彼此的onPostExecute上开始以下任务,但是看到你的任务的名字,我认为你也是单独使用这些任务,所以这意味着某种用于控制任务是否应链接的标志。

也许更好的方法是创建一个新的AsyncTask来执行每个巡回任务所完成的工作(可能需要一些重构来完成方法中的工作以避免重复代码)。

来自文档:

  

AsyncTask旨在成为Thread和Handler的辅助类   并不构成通用的线程框架。

所以,也许在你的情况下AsyncTask不是正确的工具,你应该考虑使用普通的线程作为@ZygoteInit建议。