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