Android 如何在所有异步任务完成后执行某些操作?

Android 如何在所有异步任务完成后执行某些操作?,android,asynchronous,Android,Asynchronous,我正在使用AsyncTask下载一些文件,并希望在所有任务完成后做一些事情 有什么简单的方法可以做到这一点吗?AsyncTask有一个回调方法名onPostExecute。它将在后台任务完成时执行。AsyncTask有一个回调方法名onPostExecute。它将在后台任务完成时执行。跟踪您正在运行的异步任务的数量,并在总数为0时执行某些操作 import android.os.AsyncTask; import android.os.Bundle; import android.app.Act

我正在使用
AsyncTask
下载一些文件,并希望在所有任务完成后做一些事情


有什么简单的方法可以做到这一点吗?

AsyncTask有一个回调方法名
onPostExecute
。它将在后台任务完成时执行。

AsyncTask有一个回调方法名
onPostExecute
。它将在后台任务完成时执行。

跟踪您正在运行的异步任务的数量,并在总数为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
            }
        }
    }
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.app.Activity;
导入android.view.Menu;
公共类MainActivity扩展了活动{
public int numotasks=0;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.activity\u主菜单);
返回true;
}
公共void addTask(){
numOfTasks++;
}
公共无效删除任务(){
Numof任务--;
}
public void allTasksComplete(){
if(numotasks==0){
//完成所有任务后,做你想做的事情
}
}
类RequestTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…uri){
字符串responseString=“”;
回报率;
}
@凌驾
受保护的void onPreExecute()
{
addTask();//将一个添加到任务计数。
super.onPreExecute();
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
removeTask();//从任务计数中减去一。
allTasksComplete();//检查所有任务是否完成…任务计数为0
}
}
}

跟踪您正在运行的异步任务数量,并在总数为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
            }
        }
    }
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.app.Activity;
导入android.view.Menu;
公共类MainActivity扩展了活动{
public int numotasks=0;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.activity\u主菜单);
返回true;
}
公共void addTask(){
numOfTasks++;
}
公共无效删除任务(){
Numof任务--;
}
public void allTasksComplete(){
if(numotasks==0){
//完成所有任务后,做你想做的事情
}
}
类RequestTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…uri){
字符串responseString=“”;
回报率;
}
@凌驾
受保护的void onPreExecute()
{
addTask();//将一个添加到任务计数。
super.onPreExecute();
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
removeTask();//从任务计数中减去一。
allTasksComplete();//检查所有任务是否完成…任务计数为0
}
}
}
当Asyn任务完成后台处理时,您可以使用onPostExecute()回调,在典型场景中,您会通知UI(列表适配器或UI活动)文件下载完成,UI可以刷新或填充数据

onPreExecute(),在执行任务后立即在UI线程上调用。此步骤通常用于设置任务,例如在用户界面中显示进度条

请看一下这个Android参考示例:

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");
     }
 }
私有类下载文件任务扩展异步任务{
受保护的长doInBackground(URL…URL){
int count=url.length;
长totalSize=0;
for(int i=0;i

示例2:

当Asyn任务完成后台处理时,您可以使用onPostExecute()回调,在典型场景中,您会通知UI(列表适配器或UI活动)文件下载完成,UI可以刷新或填充数据

onPreExecute(),在执行任务后立即在UI线程上调用。此步骤通常用于设置任务,例如在用户界面中显示进度条

请看一下这个Android参考示例:

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");
     }
 }
私有类下载文件任务扩展异步任务{
受保护的长doInBackground(URL…URL){
int count=url.length;
长totalSize=0;
for(int i=0;i