いくつかのファイルをダウンロードするために使用AsyncTask
していますが、すべてのタスクが完了した後に何かをしたいと考えています。
これを行う簡単な方法はありますか?
いくつかのファイルをダウンロードするために使用AsyncTask
していますが、すべてのタスクが完了した後に何かをしたいと考えています。
これを行う簡単な方法はありますか?
実行中の非同期タスクの数を追跡し、合計が 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
}
}
}
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:
AsyncTask にはコールバック メソッド name がありますonPostExecute
。バックグラウンドタスクが終了すると実行されます。