Java 带有网络操作的Asynctask和另一个Asynctask问题
我遇到的问题是关于两个独立的Asynctask类。第一个异步任务使用doInBackground方法中的网络操作Java 带有网络操作的Asynctask和另一个Asynctask问题,java,android,multithreading,http,android-asynctask,Java,Android,Multithreading,Http,Android Asynctask,我遇到的问题是关于两个独立的Asynctask类。第一个异步任务使用doInBackground方法中的网络操作 HttpResponse httpResponse = httpClient.execute(httpPost); 另一个是一个线程,用于通过progressDialog加载图像 因此,如果我使用慢速internet连接(这意味着第一个asynctask尚未完成),然后直接转到第二个asynctask,则第二个类将等待第一个asynctask完成 顺便说一句,在我调用第一个异步任务
HttpResponse httpResponse = httpClient.execute(httpPost);
另一个是一个线程,用于通过progressDialog加载图像
因此,如果我使用慢速internet连接(这意味着第一个asynctask尚未完成),然后直接转到第二个asynctask,则第二个类将等待第一个asynctask完成
顺便说一句,在我调用第一个异步任务之后,我直接完成活动并调用另一个异步任务,这与什么有关系吗
tl;dr版本:
第二个asynctask在第一个asynctask完成之前不会执行doinbackground过程
我知道这一点,因为进度对话框显示了很长时间(我在preExecute中显示它,在postexecute中取消它) 编辑: 第一个异步任务涉及等待来自网络的响应。因此,虽然没有响应,但第二个asynctask不会执行其doinbackground过程 编辑2:
有没有办法让我正确使用这两个异步任务,这样第二个任务就不必等待第一个任务完成 在第一个AsyncTask onPostExecute(字符串结果)方法中启动第二个AsyncTask,然后在完成第一个AsyncTask后启动第二个AsyncTask
谢谢在第一个AsyncTask onPostExecute(字符串结果)方法中启动第二个AsyncTask,然后在完成第一个AsyncTask后启动第二个AsyncTask
感谢谷歌改变了蜂巢(3.0)中AsyncTask的行为。现在,一个进程的所有异步任务都是串行运行的——正如您所观察到的
这肯定是一个问题,正如您所描述的情况。我认为您需要将异步任务的一个转换为其他内容,例如运行的。Google更改了蜂窝中异步任务的行为(3.0)。现在,一个进程的所有异步任务都是串行运行的——正如您所观察到的
这肯定是一个问题,正如您所描述的情况。我认为您需要将一个asynctask转换为其他内容,例如Runnable。我的应用程序中也有同样的问题-我需要在任何Android版本(从2.1到4.2)中同时运行4个AsyncTasks。但在蜂巢中,异步任务以串行方式运行 所以我编写了AsyncTaskExecutor,它可以在任何Android版本上并发运行AsyncTasks 看一看: 在任何Android OS版本上并发运行AsyncTask需要所有工作,最好使用:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
task.execute();
}
因为AsyncTask.THREAD\u POOL\u执行器仅在api>=11上可用;我正在使用自己的threadPoolExecutor实例
使用AsyncTaskExecutor,您只需编写:
仅此而已。Android 2.x、3.x和4.x上没有错误
另外,我很抱歉从其他问题中复制了我的答案,但我认为这会有所帮助我的应用程序中也有同样的问题-我需要在任何Android版本(从2.1到4.2)中同时运行4个异步任务。但在蜂巢中,异步任务以串行方式运行 所以我编写了AsyncTaskExecutor,它可以在任何Android版本上并发运行AsyncTasks 看一看: 在任何Android OS版本上并发运行AsyncTask需要所有工作,最好使用:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
task.execute();
}
因为AsyncTask.THREAD\u POOL\u执行器仅在api>=11上可用;我正在使用自己的threadPoolExecutor实例
使用AsyncTaskExecutor,您只需编写:
仅此而已。Android 2.x、3.x和4.x上没有错误
顺便说一句,我很抱歉抄袭了其他问题的答案,但我认为,这会有所帮助。你的帖子不是很清楚,而且“在第一个异步任务完成之前,第二个异步任务不会执行doinbackground过程”不是一个问题。。浏览链接。您可能会找到问题的答案。我有两个单独的asynctask类。发生的情况是,第二个asynctask在第一个asynctask(网络操作)完成之前不会执行其doinbackground方法。我想我不太擅长计划进度对话框会显示很长时间。这意味着它确实调用了onpreExecute方法并停止在doinBackground方法上。您的帖子不是很清楚,而且“在第一个异步任务完成之前,第二个异步任务不会执行doinBackground过程”不是问题。。浏览链接。您可能会找到问题的答案。我有两个单独的asynctask类。发生的情况是,第二个asynctask在第一个asynctask(网络操作)完成之前不会执行其doinbackground方法。我想我不太擅长计划进度对话框会显示很长时间。这意味着它确实调用了onpreExecute方法,并在doinBackground方法处停止。谢谢您的回复。但是第二个asynctask位于不同的activitySecond asynctask运行于不同的android活动类?如果可以实现,结果将是相同的:asynctasks将以串行方式运行。我认为这不是我想要的行为。谢谢你的回答。但是第二个asynctask位于不同的activitySecond asynctask运行于不同的android活动类?如果可以实现,结果将是相同的:asynctasks将以串行方式运行。我认为这不是我们想要的行为。