0

拡張された 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...

    }
4

3 に答える 3

0

AsyncTask を呼び出すときは、次の.get()ように使用します。

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

これにより、AsyncTask が何かを返すまでコードが一時停止します

編集: 別のオプションは、独自の AsyncTask で for ループをスローして、バックグラウンド化も行い、UI と対話できるようにすることです。

于 2013-08-13T01:59:17.533 に答える
0

あなたがしていることは、良いデザインの選択ではありません。UI スレッドをブロックしないでください。そうしないと、悪名高い ANR エラー メッセージが表示されます。

クラスを使用する場合AsyncTaskは、本来の使用方法で使用してください。名前が示すAsyncTaskように、非同期バックグラウンド操作 (および短い操作) に使用されますが、メインスレッドをその実行と同期させ、その目的全体を無効にします。

でバックグラウンド作業をdoInBackground()行い、 で UI スレッドに通知しonPostExecute()ます。このメソッドは UI スレッドで実行されることが保証されているため、同時実行の問題について心配する必要はありません。onPorgressUpdate()と を使用しonPreExecute()て、 から UI スレッドに通知することもできますAsyncTask

より具体的な提案が必要な場合は、達成しようとしていることについて、さらにヒントを提供してください。

于 2013-08-13T02:14:06.233 に答える