在我的项目中,我想在加载页面时从 3 个不同的 url(webservice)并行加载数据。
为此,我使用 3 个不同的 asynctask 来加载数据。
我想在第一个异步任务启动时将进度对话框消息显示为“正在加载”,并在最后一个异步任务完成后关闭对话框(直到完成 3 个任务显示进度对话框)。
请告诉我处理这种情况的方法。
在我的项目中,我想在加载页面时从 3 个不同的 url(webservice)并行加载数据。
为此,我使用 3 个不同的 asynctask 来加载数据。
我想在第一个异步任务启动时将进度对话框消息显示为“正在加载”,并在最后一个异步任务完成后关闭对话框(直到完成 3 个任务显示进度对话框)。
请告诉我处理这种情况的方法。
有不同的方法来处理这种情况。
您可以使用使用任务数初始化的计数器变量,并且该计数器在AsyncTask完成时递减。当计数器为 0 时,将ProgressDialog关闭。您可以执行此递减并检查每个AysncTask.onPostExecute
您可能不需要 3 个不同AsyncTask的 s。您可以将单个AsyncTask与 a 一起CountDownLatch用于Thread同步。
您可以做的一种方法是创建一个接口OnThreadFinishListener(使用onThreadFinish()方法)并让您的活动实现它。你们所有人都AsyncTask应该将自己注册到侦听器,以便每次线程完成时都会调用该onThreadFinish方法。在 onThreadFinish 方法中,它应该检查是否仍有线程在后台运行(类似于if (asyncTask1.getStatus() == AsyncTask.Status.RUNNING || asyncTask2.getStatus() == AsyncTask.Status.RUNNING ... ))
如果一切都是假的,那么你可以解雇progress dialog.
你可以这样做:
//define progress dialog object globally in your parent class
ProgressDialog pd = null;
异步任务1 onPreExecute:
pd = ProgressDialog.show(this, "title", "loading", true);
异步任务2:
//do nothing
异步任务3 onPostExecute:
if(pd!=null)
pd.dismiss();