问题描述
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 (将#修改为@)