繁体   English   中英

使用ASyncTask onProgressUpdate更新UI

[英]Use ASyncTask onProgressUpdate to update UI

我有一个ASyncTask试图

  1. 在磁盘上查找图像
  2. 检查是否在线更新

然后在onPostExecute中更新图像

我想在检查磁盘(速度很快,但在ListView getView中执行起来仍然很慢)之后以及在线检查之后更新图像(即同步到ui线程)。

如果我正确阅读了帮助,则可以使用publishProgress(Progress ...)调用onProgressUpdate (在UI线程中执行 ...但是,我可以确定顺序吗? 我不在乎时间安排(如果我要稍等一下),但是我想确保在“ online-progress-state”之前发生“ disk-progress-state”

完全由您决定何时调用publishProgress()以及将什么参数传递给它。

如果您想从后台线程中调用两次(在磁盘检查之后一次,在网络检查之后一次),那很好。 要区分onProgressUpdate()的两个调用,只需跟踪您所处的状态或计数该函数已被调用的次数即可。

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

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

这是来自AsyncTask publishProgress的代码

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

AsyncTask通过将Runnable发送到主线程Handler来在UI线程上运行方法。 Handler获取FIFO队列中的每个Runnable ,并在没有并行的情况下依次运行它们。 因此,如果disk-progress-state发生在online-progress-state之前,则publishProgress的顺序将保留。 这同样适用于publishProgress和onPostExecute的顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM