android - For结构中的AsyncTask Android

标签 android android-asynctask

我想在 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 parametersexecute(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/

相关文章:

java - 当尝试声明 editText 框显示在按钮单击上时,无法解析符号 'search'

android - 用于网络请求的 AsyncTask 与 ThreadPoolExecutor

java - 使用 Asynctasks 将文本设置为多个 TextField 会导致应用程序崩溃

AsyncTask 中的 Android 上下文泄漏

android - 为什么 React Native WebView 会转到 :blank in release build? 左右

android - 选择 EditText 时如何显示软键盘?

android - Android使用GSON解析json的空指针异常

java - 取消 AsyncTask 时出错 "Cannot make a static reference to the non-static method cancel(boolean) from the type AsyncTask<Void,Integer,Void>"

java - 如何使用 RecognizerIntent 强制使用土耳其语?

android - 内存卡不存在仍然内存检查返回真