暂停增强的for循环

时间:2013-08-13 01:58:06

标签: android loops android-asynctask

我正在使用增强的for循环和switch语句来触发各种AsyncTasks。如何暂停循环的每次迭代以等待任何给定的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...

    }

3 个答案:

答案 0 :(得分:0)

当您调用AsyncTask时,请使用.get(),如下所示:

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

这将暂停代码,直到AsyncTask返回

编辑:另一种选择是将for循环放在自己的AsyncTask中,这样它也可以进行后台处理,允许你与UI进行交互

答案 1 :(得分:0)

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

如果您想使用AsyncTask类,请尝试按照它应该使用的方式使用它。正如名称所示,AsyncTask用于异步后台操作(以及简短的后台操作!),但是您正在将主线程与其执行同步,从而无法实现其整个目的。

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

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

答案 2 :(得分:0)

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