Java 等待每个异步任务完成,然后再执行下一个异步任务

Java 等待每个异步任务完成,然后再执行下一个异步任务,java,android,android-asynctask,Java,Android,Android Asynctask,我的片段中有4个异步任务类。我想执行所有四个,但一次执行一个。我尝试过task.execute().get()和task.execute().getStatus()之类的方法。这些似乎工作不好-我得到一个错误,当一个任务正在运行时,我无法运行另一个任务。以下是我尝试运行的4个异步任务: ProgressDialog dialog = new ProgressDialog(getActivity()); dialog.setTitle("Finalizing Your Run");

我的片段中有4个异步任务类。我想执行所有四个,但一次执行一个。我尝试过task.execute().get()和task.execute().getStatus()之类的方法。这些似乎工作不好-我得到一个错误,当一个任务正在运行时,我无法运行另一个任务。以下是我尝试运行的4个异步任务:

ProgressDialog dialog = new ProgressDialog(getActivity());
    dialog.setTitle("Finalizing Your Run");
    dialog.setMessage("We hope you had fun running! Please wait while we send your running data to our system. This may take a few seconds depending on your internet connection");
    dialog.setCancelable(false);
    dialog.show();
    //All the async tasks to be executed
    AddRouteCheckpoints checkpointTask = new AddRouteCheckpoints(getActivity(), dialog);
    GetRouteIdTask routeIdTask = new GetRouteIdTask(getActivity(), dialog);
    AddRouteTask addRouteTask = new AddRouteTask(getActivity(), dialog);
    AddRunTask personalRunTask = new AddRunTask(getActivity(), dialog);

是否有办法确保每个异步任务在进入下一个异步任务之前完全完成其任务

  • 在progressupdate上检查每个异步任务的进度,如果是100%,则在onpost中调用下一个异步任务
  • 您还可以在成功执行一个时发送广播
  • 您还可以为每个接口创建接口,然后调用它们并调用下一个接口

  • 前几天我也遇到了同样的情况。我是这样解决的:将活动的引用传递给异步类的构造函数,并在后台执行do函数。现在在post execute函数中,从异步类调用ur活动的公共方法以再次执行任务。。。或者试试这个:

        if (asynclass.getStatus() == android.os.AsyncTask.Status.PENDING) {
            asynclass.execute();
        } else if (RF.getStatus() == android.os.AsyncTask.Status.FINISHED) {
            asynclass = new asyncclass();
            asynclass.execute();
        } else {
            Toast.maketoast(this, "Plz wait", 1).show();
        }
    
    或者你也可以按照下面的方法来做

    您可以使用myAsyncTask.executeOnExecutor(串行执行器)执行此操作


    干杯

    为什么不在SingleThreadExecutor中执行这些异步任务

    Executor executor = Executors.newSingleThreadExecutor();
    
    然后在执行人身上执行任务:

    task.executeOnExecutor(executor);
    

    这样,只有一个线程将用于运行异步任务,其他线程将排队。

    您可以为每个线程提供回调接口,然后从它们内部调用下一个线程。您的
    执行在哪里?除此之外,
    get
    将等待结果可用。您的实现可能有缺陷。“是否有办法确保每个异步任务在进入下一个异步任务之前完全完成其任务”我觉得,如果现在在一个任务中完成4个任务之间的所有任务更好?请看我在回答此问题时使用的方法:
    task.executeOnExecutor(executor);