AsyncTask:onPostExecute是否保证在对onProgressUpdate的所有调用之后运行?

时间:2010-06-29 03:39:25

标签: android background backgroundworker android-asynctask

我想知道在调用AsyncTask#onProgressUpdate后是否可以向AsyncTask#onPostExecute发出“剩余”电话?我使用它们在同一TextView上设置文本,我不想设置诸如“完成!”之类的文本。然后通过诸如“几乎在那里 - 90%”

之类的文本覆盖它

另外,我假设onProgressUpdate方法与SwingWorker方法类似,因为对publishProgress的多次调用可能会在调用onProgressUpdate之前叠加。我真的想知道参数中“更新”和“更旧”进度更新的位置 - 也就是参数中位置0或位置progress.length的最新更新?

2 个答案:

答案 0 :(得分:2)

publishProgress的代码是:

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

sendToTarget调用使用Handler#sendMessage,文档称其“将邮件推送到邮件队列的末尾”。我理解这意味着你不会得到任何乱序更新,他们会堆积起来。此外,对于每个publishProgress来电,都会有相应的onProgressUpdate来电。

答案 1 :(得分:0)

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

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

此致