Java 在android中链接2个异步任务的正确方法

Java 在android中链接2个异步任务的正确方法,java,android,multithreading,android-asynctask,chaining,Java,Android,Multithreading,Android Asynctask,Chaining,我有两个异步任务,即任务1和任务2 我需要先运行task 1,然后再运行task 2,但我不想在task 1的onPostExecute实现中调用task 2来耦合这两个任务;因为我在其他情况下使用任务1作为独立任务 有没有一种方法可以定义这两个异步任务,而不必相互绑定,并在特定情况下将它们链接起来 非常感谢您的帮助。您可以执行以下操作: YourAsyncClass1 thread1 = new YourAsyncClass1(); thread1.execute(inputArgument1

我有两个异步任务,即任务1和任务2

我需要先运行task 1,然后再运行task 2,但我不想在task 1的onPostExecute实现中调用task 2来耦合这两个任务;因为我在其他情况下使用任务1作为独立任务

有没有一种方法可以定义这两个异步任务,而不必相互绑定,并在特定情况下将它们链接起来


非常感谢您的帮助。

您可以执行以下操作:

YourAsyncClass1 thread1 = new YourAsyncClass1();
thread1.execute(inputArgument1);

    try {
        outputResult1 = thread1.get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
if(outputResult1 == true /*Or expected result*/){
  YourAsyncClass2 thread2 = new YourAsyncClass2();
  thread2.execute(inputArgument2);
}

您可以尝试以下方法:

final Executor directExecutor = new Executor() {
  public void execute(Runnable r) {
    r.run();
  }
};
AsyncTask.execute(new Runnable() {
  task1.executeOnExecutor(directExecutor, params1);
  task2.executeOnExecutor(directExecutor, params2);
});

我的机器上现在没有android SDK,所以我无法验证它。

您可以在任务1的onPostExecute中执行一个简单的if-else来启动/不启动任务2吗?在第一个任务的onPostExecute中,您可以触发一个事件(意图、方法、处理程序等)那就开始了second@C这可能是一个可行的解决方案,但我正在尝试看看是否有更整洁的方法来实现这一目标this@Yume117-我尝试不直接从任务1的onPostExecute调用任务2。然后使用管理de任务的服务,并通过广播接收器获取响应的EventsHanks。但是,如果任务1需要10分钟才能完成,那么try-catch在10分钟标记之前是否只执行一次,从而在任务1实际完成时丢失?您好,问题是,通过调用
thread1.get()
,该部分负责等待。
try{}catch{}
块实际上只执行一次,但是等待(整整10分钟)是在第一次通过该块时执行的,在我提到的部分中。我将尽快尝试这种方法。但是,当看到这个解决方案时,如果我在UI线程上运行thread1.get(),它会在整个10分钟内冻结UI线程,对吗?因此,我想我应该在另一个异步任务中调用.get()。如果我错了,请纠正我。如果在主线程(活动)上执行
.get()
,它将冻结它-是。我认为这是主要目标,但显然不是,所以请澄清这两个
异步任务的生命周期。我的意思是描述一个测试场景,这样我们就可以看到task1何时执行,何时何地执行以及预期结果(task2也是如此)。调用
.get()
不是必须的,但是如果不想等待任务,也可以在
onPostExecute()
上设置一个标志来查看任务是否已完成。