Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有网络操作的Asynctask和另一个Asynctask问题_Java_Android_Multithreading_Http_Android Asynctask - Fatal编程技术网

Java 带有网络操作的Asynctask和另一个Asynctask问题

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完成 顺便说一句,在我调用第一个异步任务

我遇到的问题是关于两个独立的Asynctask类。第一个异步任务使用doInBackground方法中的网络操作

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将以串行方式运行。我认为这不是我们想要的行为。