web-dev-qa-db-ja.com

Android 2つのAsyncTasksをシリアルまたはパラレルで実行しますか?-2番目はフリーズしていますが、結果は問題ありません

Androidアプリケーションで、同じクラスからのパラメーターが異なる2つのAsyncTaskタスクを実行します。例:

new myAsynckTask(a,b,c).execute();
new myAssyncTask(a,d,e).execute();

それらは並行して実行されますか、それとも連続して実行されますか?最初のものが開始すると実行の進行状況が表示され、終了すると終了するのに時間がかかる2番目のものが表示されますが、進行状況が表示されないため、これを尋ねます(長方形は表示されますが進行状況バーは表示されます) 20%を表示していません。など)。凍えるようなものですが、結果は大丈夫です。

私がやりたいのは、それらを順番に実行し、2つの進行状況を確認できるようにすることです。 Android Jelly Bean 4.2.2 API Level17でアプリを実行します

14
George Melidis

それらは並行して実行されますか、それとも連続して実行されますか?

_Android:targetSdkVersion_が13以上で、Android 3.2以降のデバイスで実行している場合、それらはシリアルに実行されます。

Android 1.5で実行している場合、それらはシリアルに実行されます。

それ以外の場合は、並行して実行されます。

execute()executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)に置き換えることで、並列実行をオプトインできます。

詳細については、 AsyncTask JavaDocs の「実行順序」セクションを参照してください。

42
CommonsWare

あなたの質問への答えは次のとおりです:それはあなたがこれを実行しているAndroidのバージョンに完全に依存し、私がいくつかのアプリケーションで直面した大きな問題です。

それらを正しく実行する方法を確認したい場合は、 このリンク を確認する必要があります

1
Cruceo

更新: Android Developers からコピーされ、Yazazzelloによって開始されました

「このクラスはAPIレベル26.0.0-alpha1で非推奨になりました。AsyncTaskを直接使用してください。」

並列実行にはこれを使用する必要があります。

AsyncTaskCompat.executeParallel(new AsyncTask<Param, Void, Data>() {
                @Override
                protected Data doInBackground(Param... params) {
                    return downloader.getData(params[0]);
                }

                @Override
                protected void onPostExecute(Data response) {
                    processData(response);
                }
}, param);
0
luckyhandler