3

在我的项目中,我想在加载页面时从 3 个不同的 url(webservice)并行加载数据。

为此,我使用 3 个不同的 asynctask 来加载数据。

我想在第一个异步任务启动时将进度对话框消息显示为“正在加载”,并在最后一个异步任务完成后关闭对话框(直到完成 3 个任务显示进度对话框)。

请告诉我处理这种情况的方法。

4

3 回答 3

4

有不同的方法来处理这种情况。

  1. 您可以使用使用任务数初始化的计数器变量,并且该计数器在AsyncTask完成时递减。当计数器为 0 时,将ProgressDialog关闭。您可以执行此递减并检查每个AysncTask.onPostExecute

  2. 您可能不需要 3 个不同AsyncTask的 s。您可以将单个AsyncTask与 a 一起CountDownLatch用于Thread同步。

于 2012-05-11T06:51:26.113 回答
1

您可以做的一种方法是创建一个接口OnThreadFinishListener(使用onThreadFinish()方法)并让您的活动实现它。你们所有人都AsyncTask应该将自己注册到侦听器,以便每次线程完成时都会调用该onThreadFinish方法。在 onThreadFinish 方法中,它应该检查是否仍有线程在后台运行(类似于if (asyncTask1.getStatus() == AsyncTask.Status.RUNNING || asyncTask2.getStatus() == AsyncTask.Status.RUNNING ... )

如果一切都是假的,那么你可以解雇progress dialog.

于 2012-05-11T06:50:58.113 回答
0

你可以这样做:

//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();
于 2012-05-11T06:50:43.110 回答