我遇到的问题是关于两个单独的Asynctask类。第一个asynctask在doInBackground方法中使用网络操作
HttpResponse httpResponse = httpClient.execute(httpPost);
而另一个是使用progressDialog加载图像的线程。
所以会发生什么,如果我使用慢速互联网连接(这意味着第一个asynctask还没有完成),然后直接转到第二个asynctask,第二个类将等到第一个完成。< / p> 顺便说一句,在我调用第一个asynctask后,我直接完成了活动并调用另一个,这是否与任何事情有关?
tl; dr版本:
第二个asynctask在第一个asynctask完成之前不会执行doinbackground进程
我知道这是因为进度对话框显示了很长时间(我在preExecute中显示它并在postexecute中将其关闭)
修改
第一个asynctask涉及等待来自网络的响应。因此,虽然没有响应,但第二个asynctask不会执行其doinbackground过程。
编辑2:
我有没有办法正确使用这两个asynctask所以第二个不必等待第一个完成?
答案 0 :(得分:2)
我的应用程序遇到了同样的问题 - 我需要在任何Android版本中同时运行4个AsyncTasks(从2.1到4.2)。但是从Honeycomb,AsyncTasks连续运行。
所以我编写了AsyncTaskExecutor - 它可以在任何Android版本上同时运行AsyncTasks。
看看:
在任何Android操作系统版本上同时运行AsyncTask都需要做全部工作,最好使用:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
task.execute();
}
因为AsyncTask.THREAD_POOL_EXECUTOR仅在api&gt; = 11时可用;我正在使用自己的threadPoolExecutor实例
AsyncTaskExecutor.executeConcurrently(task, params);
P.S。我很抱歉从其他问题复制我的答案,但我认为,这将是有帮助的
答案 1 :(得分:1)
在First AsyncTask onPostExecute(String result)方法中启动第二个AsyncTask,然后在完成第一个AsyncTask之后启动第二个AsyncTask。
谢谢
答案 2 :(得分:1)
Google改变了Honeycomb(3.0)中AsyncTask的行为。现在,进程的所有AsyncTask都是串行运行的 - 正如您所观察到的那样。
这肯定是个问题,就像你所描述的那样。我想你需要将你的一个asynctask转换成其他东西,例如一个Runnable。