Android异步任务等待其他任务完成

标签 android concurrency android-asynctask

我有两个异步任务都执行单独的网络操作。我希望一个异步任务等待其他任务完成单个变量。我想这样做就像在第一个的 onPostexecute 上执行其他异步操作一样,但是对于单个变量变量我必须让其他任务等待第一个完成......有什么可以有效实现的 enter image description here

最佳答案

引用this , 你不能这样使用 .execute();

首先你必须像这样开始你的任务:

// Start first task
new Task1().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "");
// Start second task
new Task2().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "");

然后你可以创建一个静态变量,这样两个任务都可以访问它:

public static boolean task1Finished = false;

任务的简单示例:

第一个任务

private class Task1 extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... params) {
        Log.d("myApp", "Task1 started");

        for(int x = 0; x < 10; ++x)
        {
            try 
            {
                Thread.sleep(1000);
                //Log.d("myApp", "sleeped 1000 ms");
            } 
            catch (InterruptedException e) 
            {
                e.printStackTrace();
            }
        }
        return "";
    }

    @Override
    protected void onPreExecute() {
    }

    @Override
    protected void onPostExecute(String result) {
        // Lets the second task to know that first has finished
        task1Finished = true;
    }
}

第二个任务

private class Task2 extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... params) {
        Log.d("myApp", "Task2 started");
        while( task1Finished == false )
        {
            try 
            {
                Log.d("myApp", "Waiting for Task1");
                Thread.sleep(1000);
            } 
            catch (InterruptedException e) 
            {
                e.printStackTrace();
            }
        }

        Log.d("myApp", "Task1 finished");
        // Do what ever you like
        // ...
        return "";
    }

    @Override
    protected void onPreExecute() {
    }

    @Override
    protected void onPostExecute(String result) {
        Log.d("myApp", "All done here (Task2)");
    }
}

关于Android异步任务等待其他任务完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16851807/

相关文章:

android - 编辑文本 : Change background image when start typing

java - volatile 读取和非 volatile 字段

java - 并发静态上下文

java - OnPostExecute 方法不解析 JSON 数组

java - [Android map API] : Google-play-services prompting update on phone but not in emulator.

android - 位图内存不足问题

java - 为什么 CompletableFuture allOf 方法会进行二分查找?

java - 异步和 ListView Android

java - 错误和应用程序停止不幸的是,StrictMode.ThreadPolicy() 也不起作用

java - Android - 无法实例化 Activity - 应用已停止