gpt4 book ai didi

java - Java 中的 AsyncTask 等价物

转载 作者:搜寻专家 更新时间:2023-10-31 20:00:42 26 4
gpt4 key购买 nike

在 android 中有运行线程的 AsyncTask,然后我可以使用执行后的方法再次与主线程交互。在java中有等效的吗?我正在尝试在单独的线程 (doInBackground) 上运行一个计时器,一旦时间结束,它将允许我与主线程交互以重新启动服务(onPostExecute 将重新启动服务)

最佳答案

我不是 Android 开发人员,但我认为使用 CompletableFuture 可以轻松实现它在 Java 8 上:

import java.lang.reflect.InvocationTargetException;
import java.util.concurrent.CompletableFuture;
import javax.swing.SwingUtilities;

public abstract class AsyncTask <Params, Progress, Result> {
protected AsyncTask() {
}

protected abstract void onPreExecute();

protected abstract Result doInBackground(Params... params) ;

protected abstract void onProgressUpdate(Progress... progress) ;

protected abstract void onPostExecute(Result result) ;

final void publishProgress(Progress... values) {
SwingUtilities.invokeLater(() -> this.onProgressUpdate(values) );
}

final AsyncTask<Params, Progress, Result> execute(Params... params) {
// Invoke pre execute
try {
SwingUtilities.invokeAndWait( this::onPreExecute );
} catch (InvocationTargetException|InterruptedException e){
e.printStackTrace();
}

// Invoke doInBackground
CompletableFuture<Result> cf = CompletableFuture.supplyAsync( () -> doInBackground(params) );

// Invoke post execute
cf.thenAccept(this::onPostExecute);
return this;
}
}

关于java - Java 中的 AsyncTask 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36272642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com