2

我想知道是否有可能在被呼叫AsyncTask#onProgressUpdate后获得“剩余”呼叫AsyncTask#onPostExecute?我正在TextView使用它们设置相同的文本,并且我不想设置诸如“完成!”之类的文本。然后稍后用诸如“几乎那里 - 90%”之类的文本覆盖它

此外,我假设该onProgressUpdate方法的工作方式类似于一个SwingWorker方法,因为多个调用publishProgress可能会在调用发生之前堆积起来onProgressUpdate。我真的很想知道参数上的“较新”和“较旧”进度更新在哪里 - 也就是参数中位置 0 或位置的最新更新progress.length

4

2 回答 2

2

代码publishProgress是:

protected final void publishProgress(Progress... values) {
    sHandler.obtainMessage(MESSAGE_POST_PROGRESS,
            new AsyncTaskResult<Progress>(this, values)).sendToTarget();
}

文档所说的sendToTarget调用使用Handler#sendMessage“将消息推送到消息队列的末尾”。我理解这意味着您不会得到任何乱序更新并且它们会堆积起来。此外,对于每个publishProgress呼叫,都会有一个相应的onProgressUpdate呼叫。

于 2010-06-29T03:54:51.917 回答
0

嗯,很抱歉,但无论前面的答案如何,我都会回答:是的,您可以保证在所有对 onProgressUpdate() 的调用之后都会调用 onPostExecute()。

为什么?因为 doInBackground 负责调用 onProgressUpdate(),所以它不能在它之外发生。在检索结果后调用 onPostExecute(),因为它确实将其传输到 onPostExecute()

问候

于 2011-10-29T18:31:44.847 回答