我想在 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
}
}
关于android - For结构中的AsyncTask Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18770857/