这是一个很好的方法来不同的任务与if语句?



我目前正在使用执行器服务,根据不同参数的if语句做不同的5个任务,完成任务后,我想在用户界面中更新进度条和textview等视图。我的问题是这种方法是好的还是有其他的方法?

private void startTask(String studentName){
ExecutorService service = Executors.newSingleThreadExecutor();
handler = new Handler(Looper.getMainLooper());
if (studentName.equals("name1")){
service.execute(taskOne("example1"));
}else if (studentName.equals("name2")){

File file = ..
service.execute(taskTwo("example1",file));

}else if (studentName.equals("name3")){

}

}

任务1:

private Runnable taskOne(String p1){

return new Runnable() {
@Override
public void run() {
//background task

handler.post(new Runnable() {
@Override
public void run() {

//update UI
}
});


}
};

任务2:

private Runnable taskTwo(String p1, File file) {
return new Runnable() {
@Override
public void run() {
//background task
handler.post(new Runnable() {
@Override
public void run() {
//update UI
}
});

}
};

我认为您不应该将业务逻辑和UI逻辑耦合在一个任务中。一般来说,业务逻辑是不同的,但UI逻辑是相同的。

所以,你应该保持你的任务清晰:

private Runnable taskOne(String p1) {
return () -> {
//background task
};
}
private Runnable taskTwo(String p1, File file) {
return () -> {
//background task
};
}

抽象地维护UI逻辑:

private static void runTask(Runnable task, ExecutorService service) {
CompletableFuture.runAsync(task, service)
.whenComplete((a, b) -> {
// update UI
});
}
private void startTask(String studentName) {
ExecutorService service = Executors.newSingleThreadExecutor();
handler = new Handler(Looper.getMainLooper());
if (studentName.equals("name1")) {
runTask(taskOne("example1"), service);
} else if (studentName.equals("name2")) {
File file = ..
runTask(taskTwo("example1", file), service);
} else if (studentName.equals("name3")) {
}
}

您在代码中使用newSingleThreadExecutor,这意味着您的任务不会并发运行。这符合你的期望吗?

相关内容

  • 没有找到相关文章

最新更新