Android AsyncTask get()形成另一个AsyncTask()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android AsyncTask get()形成另一个AsyncTask()相关的知识,希望对你有一定的参考价值。

背景

我有一个AsyncTask(称之为uploadHeader),它将一些数据上传到服务器。

我有第二个上传一些相关数据的AsyncTask(uploadDetail),这需要上传初始数据:标题上传返回服务器发出的id,用于在上传之前更新本地详细记录。

如果在最初调用uploadHeader时存在连接问题,则不会上传标题信息。所以在uploadDetail.doInBackground()开始时,我检查本地标题记录的状态,看看它是否已经成功上传到服务器,如果没有,请调用uploadHeader.get()上传标题并等待获取id,然后再上传详细记录。

问题

它似乎挂在get()调用。调试它,它似乎是创建一个FutureTask然后循环在其中的某个地方。看起来好像第二个AsyncTask在第一个AsyncTask完成后排队等待运行,它从未在第二个AsyncTask等待。

我已经阅读了一些关于从另一个调用一个AsyncTask的其他帖子/文章,但它们似乎都专注于让两个并行运行。我希望这个阻止,直到另一个任务完成。还有人提到“必须在UI线程上调用execute(Params ...)。”,没有一篇文章提到get()。或者get()基本上与execute()相同,等待结果?

作为一种解决方法,我可以将http调用上传到一个单独的类中,并从uploadHeaderuploadDetail调用它,因此uploadDetail不需要创建uploadHeader任务。我只是想明白为什么它不能正常工作。

答案

get()将阻止你的执行,直到第二个AsyncTask返回一个值,如果你的第一个AsyncTask正在做一些工作,即使在你设计的工作流程中也会在用户界面上重新执行,请不要这样做。

我肯定会在Handlers上使用AsyncTasks在它们之间进行通信,如果你需要,我甚至可以使用另一个用于UI。你可能会找到一个很好的例子here。作为参考,请查看here

以上是关于Android AsyncTask get()形成另一个AsyncTask()的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中运行 AsyncTask?

Android中AsyncTask的通用类?

在Android中如何从Asynctask接收字符串?

如何使用 asynctask 将图像从 android 上传到 php

获取“致命异常 AsyncTask #1”

求助,AsyncTask里doinbackground不运行