Java 在android中的asynctask中等待异步任务
我有一个Android中的AsyncTask,它在不同的线程上运行一个异步任务(我没有掌握线程的生命周期,但我可以回调该任务)。是否有方法等待异步任务完成以调用异步任务的后执行函数Java 在android中的asynctask中等待异步任务,java,android,multithreading,asynchronous,android-asynctask,Java,Android,Multithreading,Asynchronous,Android Asynctask,我有一个Android中的AsyncTask,它在不同的线程上运行一个异步任务(我没有掌握线程的生命周期,但我可以回调该任务)。是否有方法等待异步任务完成以调用异步任务的后执行函数 谢谢,我认为您应该在这里定义一个侦听器接口,将实现该侦听器的对象的引用传递给您的异步任务,并从onPostExecute调用此对象的方法 // this is your interface // create it in its own file or as an inner class of your task p
谢谢,我认为您应该在这里定义一个
侦听器
接口,将实现该侦听器的对象的引用传递给您的异步任务
,并从onPostExecute
调用此对象的方法
// this is your interface
// create it in its own file or as an inner class of your task
public interface OnTaskFinishListener {
public void onTaskFinish();
}
// add the following code to your task's class
private OnTaskFinishListener mOnTaskFinishListener;
public void setOnTaskFinishListener(OnTaskFinishListener listener) {
mOnTaskFinishListener = listener;
}
// in your onPostExecute method call this listener like this
// this will call the implemented method on the listener that you created
if (mOnTaskFinishListener != null) {
mOnTaskFinishListener.onTaskFinish();
}
// suppose this is where you start your task
MyBackgroundTask task = new MyBackgroundTask();
// set new listener to your task - this listener will be called
// when onPostExecutes completed -> that's what you need
task.setOnTaskFinishListener(new OnTaskFinishListener() {
@Override
public void onTaskFinish() {
// implement your code here
}
});
task.execute(); // and start the task
任务1
任务2
我宁愿不要实施忙碌等待策略。两个
AsyncTask
都可以共享一个信号灯
,该信号灯使一个停止,而另一个完成
初始化你的信号灯
private final Semaphore semaphore = new Semaphore(0);
将该对象传递给两个任务
public AsyncTask1(Semaphore semaphore){
this.semaphore= semaphore;
}
doInBackground(){
//do something
semaphore.acquire(); // <- Waiting till the other task finises
}
请发布一些代码,还不完全清楚问题出在哪里。我想,我们可以使用
线程。睡眠(时间)
来达到这个目的。@NigamPatro,睡眠在这方面是不可预测的,不会有多大帮助。@saopayne好的,我是这样想的。我现在没有任何代码,只是在思考这个问题的解决方案。我只知道我必须等待异步完成(从库中),才能使用结果。但是你觉得在Android环境中使用信号量有什么副作用吗?哦,天哪,这个答案很久以前就有了。对于信号量,您正在使用一些低级指令来处理并发性。从今天起,我建议使用Kotlin协同程序或RxJava 2来完成此任务,但您认为RxJava 2是否适合这里的情况,我的意思是我们要停止doInBackground()
以等待其他异步任务完成。使用RxJava,您可以处理多个数据流。再读一遍这个问题,我想我不明白这个问题,但我想说操作员解决了这个问题
private final Semaphore semaphore = new Semaphore(0);
public AsyncTask1(Semaphore semaphore){
this.semaphore= semaphore;
}
doInBackground(){
//do something
semaphore.acquire(); // <- Waiting till the other task finises
}
public AsyncTask2(Semaphore semaphore){
this.semaphore= semaphore;
}
onPostExecute(){
//do something
semaphore.release();
}