2

いくつかのファイルをダウンロードするために使用AsyncTaskしていますが、すべてのタスクが完了した後に何かをしたいと考えています。

これを行う簡単な方法はありますか?

4

3 に答える 3

4

実行中の非同期タスクの数を追跡し、合計が 0 になったら何かを実行します。

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

    public int numOfTasks = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    public void addTask(){
        numOfTasks++;
    }

    public void removeTask(){
        numOfTasks--;
    }

    public void allTasksComplete(){

        if(numOfTasks ==0){
            //do what you want to do if all tasks are finished
        }

    }

    class RequestTask extends AsyncTask<String, String, String>{

        @Override
        protected String doInBackground(String... uri) {

            String responseString = "";
            return responseString;
        }

         @Override
            protected void onPreExecute() 
            {
                    addTask(); // adds one to task count.
                    super.onPreExecute();

            }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            removeTask(); // subtracts one from task count.
            allTasksComplete(); // checks to see if all tasks are done...  task count is 0
            }
        }
    }
于 2012-10-23T02:21:42.533 に答える
0

Asynタスクがバックグラウンド処理を終了するときにonPostExecute()コールバックを使用できます。通常のシナリオでは、ファイルのダウンロードが終了し、UIがデータを更新または入力できることをUI(リストアダプターまたはUIアクティビティ)に通知します。

onPreExecute()は、タスクが実行された直後にUIスレッドで呼び出されます。この手順は通常、ユーザーインターフェイスに進行状況バーを表示するなどしてタスクを設定するために使用されます。

このAndroidRefの例をご覧ください。

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

http://developer.android.com/reference/android/os/AsyncTask.html

例2:

https://github.com/ashutoshchauhan13/TwitterFeedApp/blob/master/TwitterFeedApp/src/com/sixthsense/twitterfeed/ui/TwitterFeedActivity.java

于 2012-10-23T10:21:42.077 に答える
0

AsyncTask にはコールバック メソッド name がありますonPostExecute。バックグラウンドタスクが終了すると実行されます。

于 2012-10-23T02:09:20.540 に答える