【问题标题】:How to run two asynchronous tasks one after another ?如何一个接一个地运行两个异步任务?
【发布时间】:2016-05-16 18:20:14
【问题描述】:

我有两个异步任务,我希望它们在单击按钮时单独运行。我的意思是当单击按钮时,第二个按钮不会启动,直到第一个按钮已经完成。 顺便说一句,我尝试过使用:

if(task1.getStatus()==AsyncTask.Status.FINISHED){
task2.excecute();
}

但它不起作用......

有什么帮助吗?

【问题讨论】:

  • 你可以把task2.execute();放到onPostExecutetask1
  • 如果你想异步完成两件事情(A 和 B),让 B 在 A 之后运行,为什么不创建一个 single 任务来执行 A 然后 B?跨度>
  • @hamzaoui 您需要调用第一个任务,然后创建 onPostExecute 方法,然后在 PostExecute 方法中调用第二个 Asyntask。解决
  • @shayanpourvatan 它没有解决问题,它仍然并行运行
  • @hamzaouiaymen 不可能,因为onPostExecute 在任务完成后运行,我认为您的问题出在其他地方。

标签: java android android-asynctask


【解决方案1】:

自 HONEYCOMB 以来,在使用execute() 时,“任务在单线程上执行,以避免并行执行导致的常见应用程序错误。”因此,默认情况下,您的 AsyncTasks 应该一个接一个地运行。

http://developer.android.com/reference/android/os/AsyncTask.html

您如何确认情况并非如此?

【讨论】:

  • 但是当我做:task1.execute(); task2.execute();它们同时运行,这就是问题所在!
  • 请问您是如何测试它们同时运行的?
【解决方案2】:

if 语句不会等到条件满足。它只是评估条件,如果为真,则执行 if 块中的语句,否则线程继续执行 if 块之后的语句。实际上你必须等待条件。

最简单的方法是实现一个等待循环:

while ( task1.getStatus()!=AsyncTask.Status.FINISHED )
{
    Thread.sleep( 10 );
}
task2.execute();

但是这种方法的主要缺点是实际线程是阻塞的。考虑使用 java 6 引入的 Future 框架来解决您的问题

【讨论】:

    猜你喜欢
    • 2018-03-30
    • 2021-08-27
    • 1970-01-01
    • 2022-11-22
    • 2019-05-22
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    相关资源
    最近更新 更多