在 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/