如何完成所有AsynTask完成时的活动

问题描述:

我在我的启动屏幕Activity中有三个AsyncTasks,用于下载缓存的应用程序数据。我不想真正开始下一个活动,直到所有task完成。如何完成所有AsynTask完成时的活动

有没有这样做的有效方法?

这里是我打电话给我的任务在onCreate

  TrendingTask task = new TrendingTask(SplashActivity.this); 
      task.execute(); 

      TrendingWatchingTask task2 = new TrendingWatchingTask(
        SplashActivity.this); 
      task2.execute(); 

      new MasterTask().execute(); 

他们都称为,一前一后。我实际上并没有开始下一个活动,直到达到MasterTaskonPostExecute()。但我相信这是一场赌博,因为另外两场可能无法完成。

注:MasterTask是内部class而其他两个是他们自己的类。

+0

你可以确定是否所有的asynctask都是通过查看它们串行还是并行运行来完成的。根据您的API级别,这已经改变了几次。看看这篇文章(从中间开始)以获取更多信息:http://bon-app-etit.blogspot.be/2013/04/the-dark-side-of-asynctask.html – dumazy 2013-04-30 08:23:02

您可以保留一个全局整数计数器,并在AsyncTask每次启动时(在onPreExecute()中)递增并在onPostExecute()中递减。当你启动你的活动时,你可以检查这个计数器是否等于零。如果它不是 - 那么你知道你已经有AsyncTasks在运行。

+1

虽然这听起来可能相当合理乍一看,你如何在开始你的活动之前继续检查?你是否继续检查循环?假设你在非UI线程中循环,如果你在'onPreExecute'中递增并在'onPostExecute'中递减,你的支票可能会进入两个'AsyncTask'之间,此时计数器将为0,但实际上你的任务并不全是完整的。 – kabuko 2013-04-30 00:10:18