0

我正在使用增强的 for 循环和 switch 语句来触发各种 AsyncTask。如何暂停循环的每次迭代以等待任何给定的 AsyncTask 完成?我试图在每个 AsyncTask 完成时生成一个线程并等待/加入/通知,但我只是一直冻结 UI。下面是我的代码片段...

for (Integer integer : sequence) {

    switch (integer) {
        case 1: // Async process
            break;
        case 2: // Async process
            break;
        case 3: // Async process
            break;
        case 4: // Async process
            break;
        default: break;


        }

        //Need magic solution here...

    }
4

3 回答 3

0

当你调用 AsyncTask 时,.get()像这样使用:

new MyAsyncTask().execute().get();

这将暂停您的代码,直到 AsyncTask 返回某些内容

编辑:另一种选择是在它自己的 AsyncTask 中抛出 for 循环,以便它也是后台,允许您与 UI 交互

于 2013-08-13T01:59:17.533 回答
0

循环不是一个好的选择。在每个 AsyncTask() 之后添加一个“完成”回调。创建这种代码链。您可以保存链中最后添加的项目,以便在链中添加新项目。

于 2013-08-13T02:31:58.643 回答
0

您正在做的事情不是一个好的设计选择。你永远不应该阻塞 UI 线程,否则你将面临臭名昭著的 ANR 错误消息。

如果您想使用AsyncTask该类,请尝试以应有的方式使用它。顾名思义, AnAsyncTask用于异步后台操作(和短操作!),但您正在同步主线程与其执行,使其全部目的无效。

做你的后台工作,doInBackground()然后通知 UI 线程在onPostExecute(). 此方法保证在 UI Thread 上执行,因此您不必担心并发问题。您还可以使用onPorgressUpdate()onPreExecute()AsyncTask.

对于更具体的建议,您应该向我们提供有关您要达到的目标的更多提示。

于 2013-08-13T02:14:06.233 回答