微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。