如何完成所有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();
他们都称为,一前一后。我实际上并没有开始下一个活动,直到达到MasterTask
的onPostExecute()
。但我相信这是一场赌博,因为另外两场可能无法完成。
注:MasterTask
是内部class
而其他两个是他们自己的类。
答
您可以保留一个全局整数计数器,并在AsyncTask每次启动时(在onPreExecute()中)递增并在onPostExecute()中递减。当你启动你的活动时,你可以检查这个计数器是否等于零。如果它不是 - 那么你知道你已经有AsyncTasks在运行。
+1
虽然这听起来可能相当合理乍一看,你如何在开始你的活动之前继续检查?你是否继续检查循环?假设你在非UI线程中循环,如果你在'onPreExecute'中递增并在'onPostExecute'中递减,你的支票可能会进入两个'AsyncTask'之间,此时计数器将为0,但实际上你的任务并不全是完整的。 – kabuko 2013-04-30 00:10:18
你可以确定是否所有的asynctask都是通过查看它们串行还是并行运行来完成的。根据您的API级别,这已经改变了几次。看看这篇文章(从中间开始)以获取更多信息:http://bon-app-etit.blogspot.be/2013/04/the-dark-side-of-asynctask.html – dumazy 2013-04-30 08:23:02