1

つまり、私が行っているのは、ループがあり、ループ内でAsyncTaskを呼び出すので、それらがたくさんある可能性があります。私の理解では、ループが完了した後、すべてが完了したというメッセージを表示することはできません。メッセージはAsyncTasksが完了する前に表示されるため、非同期スレッドのポイントのようなものです。

AsyncTaskが1つしかない場合は、簡単です。メッセージを表示するコードをonPostExecute()に配置しますが、今では多くのAsyncTaskがあります。

では、メッセージを表示できるように、すべてのAsyckTastスレッドがいつ終了したかを知る方法はありますか?

ご想像のとおり、お返しにご回答いただきありがとうございます。私はJavaを初めて使用します。

4

1 に答える 1

1

作成static Integerするたびにインクリメントし、デクリメントしてみてください。0に達すると、すべてのタスクが終了します。AsyncTaskonPostExecute()

例:タスクが作成されたとき:

 synchronized(staticInt) {
    //create AsyncTask
    ++staticInt;
 }

そしてそれが終わったとき:

 protected void onPostExecute(Object result) {
     synchronized(staticInt) {
        --staticInt;
        if (staticInt == 0) {
           //show message
        }
     }
 }

@Jamesが提案したように、これを使用して、特定の時間に実行されるAsyncTaskの最大数を制御することもできます。

 while (staticInt >= MAX_NUMBER_OF_THREADS) {
     //wait
 }

 synchronized(staticInt) {
    //create AsyncTask
    ++staticInt;
 }

待機通知アプローチで改善できます。

于 2012-06-07T08:59:05.100 に答える