在我的项目中,我想在加载页面的同时从3个不同的URL(webservice)并行加载数据。
为此我使用3个不同的asynctask来加载数据。
我希望在第一次asynctask启动时将进度对话框消息显示为“loading”,并在最后一次asynctask完成后显示关闭对话框(直到完成3个任务显示进度对话框)。
请告诉我处理这种情况的方法。
答案 0 :(得分:4)
有不同的方法来处理这种情况。
您可以使用使用任务数初始化的计数器变量,当AsyncTask
完成时,此计数器会递减。当计数器为0时,ProgressDialog
被取消。你可以在每个AysncTask
的{{1}} onPostExecute
中执行此减量并检查进度对话框被解雇。
您可能不需要3个不同的AsyncTask
。您可以使用单AsyncTask
CountDownLatch
进行Thread
同步。
答案 1 :(得分:1)
您可以使用的一种方法是创建一个界面OnThreadFinishListener
(使用onThreadFinish()
方法)并让您的活动实现它。您的所有AsyncTask
都应该将自己注册到侦听器,因此每次线程完成时都会调用onThreadFinish
方法。在onThreadFinish方法中,它应该检查是否还有一个在后台运行的线程(类似if (asyncTask1.getStatus() == AsyncTask.Status.RUNNING || asyncTask2.getStatus() == AsyncTask.Status.RUNNING ... )
)
如果一切都是假的,那么你可以解雇progress dialog
。
答案 2 :(得分:0)
您可以按照以下方式执行此操作:
//define progress dialog object globally in your parent class
ProgressDialog pd = null;
AsyncTask1 onPreExecute
:
pd = ProgressDialog.show(this, "title", "loading", true);
<强> AsyncTask2 强>:
//do nothing
AsyncTask3 onPostExecute
:
if(pd!=null)
pd.dismiss();