我想在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
    }
}

07-28 00:04