使用ASyncTask onProgressUpdate更新UI

时间:2013-07-21 13:00:20

标签: android

我有一个尝试

的ASyncTask
  1. 在磁盘上找到图像
  2. 检查是否更新在线
  3. 然后在 onPostExecute 更新图片

    我想在检查磁盘之后更新映像(即同步到ui线程)(这很快,但在ListView getView 中仍然很慢)和在线检查后。

    如果我正确阅读了帮助,我可以使用 publishProgress(进度...)调用 onProgressUpdate (在UI线程中执行)...但是,我可以确定订单?我不关心计时(如果我要等一下)但我想确保“在线进展状态”之前发生“磁盘进展状态”

3 个答案:

答案 0 :(得分:2)

完全取决于您决定何时致电publishProgress()以及您传递给它的参数。

如果你想从你的后台线程中调用两次 - 一次在磁盘检查之后,一次在网络检查之后 - 那就没问题了。要区分onProgressUpdate()中的两个调用,只需跟踪您所处的状态,或者计算该函数已被调用的次数。

UI线程上的调用与后台线程中对publishProgress()的调用顺序相同。

答案 1 :(得分:1)

如果我理解正确,你会问是否以相同的顺序执行 publishProgress 调用 onProgressUpdate 。答案是肯定的,因为它是通过处理程序将消息发布到UI线程。

以下是AsyncTask publishProgress的代码

sHandler.obtainMessage(MESSAGE_POST_PROGRESS, new AsyncTaskResult<Progress>(this, values)).sendToTarget();

答案 2 :(得分:1)

AsyncTask通过将Runnable发送到主线程Handler来运行UI线程上的方法。这个Handler占用FIFO队列中的每个Runnable并按顺序运行它们而没有并行性。因此,如果磁盘进度状态发生在online-progress-state之前,则保留publishProgress的顺序。 这同样适用于publishProgress和onPostExecute的顺序。