Android runonuithread 在其他任务完成之前执行

问题描述

我有一个助手类

public class AppExecutors {

    // For Singleton instantiation
    private static final Object LOCK = new Object();
    private static AppExecutors sInstance;
    private final Executor diskIO;
    private final Executor mainThread;
    private final Executor networkIO;

    private AppExecutors(Executor diskIO,Executor networkIO,Executor mainThread) {
        this.diskIO = diskIO;
        this.networkIO = networkIO;
        this.mainThread = mainThread;
    }

    public static AppExecutors getInstance() {
        if (sInstance == null) {
            synchronized (LOCK) {
                sInstance = new AppExecutors(Executors.newSingleThreadExecutor(),Executors.newFixedThreadPool(3),new MainThreadExecutor());
            }
        }
        return sInstance;
    }

    public Executor diskIO() {
        return diskIO;
    }

    public Executor mainThread() {
        return mainThread;
    }

    public Executor networkIO() {
        return networkIO;
    }

    private static class MainThreadExecutor implements Executor {
        private Handler mainThreadHandler = new Handler(Looper.getMainLooper());

        @Override
        public void execute(@NonNull Runnable command) {
            mainThreadHandler.post(command);
        }
    }
}

我有一个调用方法

 AppExecutors.getInstance().diskIO().execute(new Runnable() {
            @Override
            public void run() {
                 //Do task 1
                 doTask2();
                 AppExecutors.getInstance().mainThread().execute(new Runnable() {
                                @Override
                                public void run() {
                                    //Task 4(Update some view base on task 1 and 2),}
                            });
                 //Do task 5
            }
});

private void doTask2(){
AppExecutors.getInstance().diskIO().execute(new Runnable() {
                                @Override
                                public void run() {
                                    //Do task 2
                                AppExecutors.getInstance().mainThread().execute(new Runnable() {
                                @Override
                                public void run() {

                                    //Task 3 (Update some view base on task 2)
                                }
                            });
                                }
                            });
}

所以我想做任务1,然后在后台运行另一个任务(任务2),更新它的视图(任务3), 运行任务4,然后运行任务5

如果我运行这个,顺序将是: 任务1 任务 5 任务 2 任务 3 任务 4

我想要的是: 任务1 任务 2 任务 3 任务 4 任务 5

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)