2

私が抱えている問題は、2 つの別個の Asynctask クラスに関するものです。最初の asynctask は doInBackground メソッドでネットワーク操作を使用します

HttpResponse httpResponse = httpClient.execute(httpPost);

もう1つは、progressDialogで画像をロードするためのスレッドです。

したがって、低速のインターネット接続を使用している場合 (最初の asynctask がまだ終了していないことを意味します)、2 番目の asynctask に直接移動すると、2 番目のクラスは最初のクラスが終了するまで待機します。

ところで、最初の asynctask を呼び出した直後に、アクティビティを直接終了し、別のアクティビティを呼び出しますが、これは何か関係がありますか?

tl;dr バージョン:

2 番目の asynctask は、最初の asynctask が完了するまで doinbackground プロセスを実行しません。

進行状況ダイアログが長時間表示されるため、これを知っています(これを preExecute で表示し、postexecute で却下します)。

編集:

最初の asynctask では、ネットからの応答を待ちます。そのため、応答がない間、2 番目の asynctask は doinbackground プロセスを実行しません。

編集2:

これら 2 つの asynctask を適切に使用する方法はありますか?

4

3 に答える 3

2

私のアプリでも同じ問題がありました.4つのAsyncTasksを任意のAndroidバージョン(2.1から4.2まで)で同時に実行する必要がありました。しかし、Honeycomb からは、AsyncTasks はシリアルで実行されます。

だから私は AsyncTaskExecutor を書きました - それはどの Android バージョンでも AsyncTasks を同時に実行できます。

見てみましょう:

AsyncTaskExecutor

AsyncTask を任意の Android OS バージョンで同時に実行するには、すべての作業が必要です。以下を使用することをお勧めします。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
    task.execute();
}

AsyncTask.THREAD_POOL_EXECUTOR は api >= 11 でのみ使用できるため。独自の threadPoolExecutor インスタンスを使用しています

AsyncTaskExecutor を使用すると、次のように書くだけです。

AsyncTaskExecutor.executeConcurrently(task, params);

それだけです。Android 2.x、3.x、および 4.x でエラーなし

PS他の質問から回答をコピーして申し訳ありませんが、参考になると思います

于 2012-12-09T20:16:25.300 に答える
1

最初の AsyncTask onPostExecute(String result) メソッドで 2 番目の AsyncTask を開始し、最初の AsyncTask の完了後に 2 番目の AsyncTask を開始します。

ありがとう

于 2012-10-14T17:59:19.350 に答える
1

Google は Honeycomm (3.0) で AsyncTask の動作を変更しました。これで、プロセスのすべての AsyncTask がシリアルで実行されます - あなたが観察したように。

あなたが説明した場合のように、これは確かに問題になる可能性があります。asynctask の 1 つを別のもの、たとえば Runnable に変換する必要があると思います。

于 2012-11-29T17:23:50.220 に答える