在我的项目中,我想在加载页面时从 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();