我想在Android上实现以下内容:
for(int i=0; i<num; i++){
//a,b.. are changing
aTask = new myAsyncTask(a,b..);
aTask.execute();
//Code to wait for myAsyncTask to finish
}
问题是如何在开始新迭代之前如何等待myAsyncTask完成。我认为一种可能的解决方案是将Handler放入其中以等待几秒钟。例如:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
}
}, 5000);
但这即使是可行的也不对,因为您必须花标准时间等待myAsyncTask。并且不确定myAsyncTask是提前完成还是延迟完成,因为a,b ..参数在每次迭代中都会更改。
我认为的另一种解决方案是每次循环询问aTask对象以获取myAsyncTask的状态并检查其是否完成。例如:
while(!aTask.getStatus().equalsTo(AsyncTask.Status.FINISHED)){
}
但这不起作用,因为myAsyncTask始终在运行。
有人可以帮我吗?
最佳答案
//Code to wait for myAsyncTask to finish
如果您在那里等待,则将冻结UI。如果您打算等待,另一个线程有什么意义?
我的猜测是,您需要在optional parameters方法中使用execute(Params...)。您可以放置“ a”,“ b”或这些对象是什么以及放置多少无关紧要。这将使您的任务能够执行所有任务并获得更好的控制。
protected Long doInBackground(Objects... objs){
for(int i = 1; i < objs.length; i++){
// Do Work
}
}