0

我有一个 ASyncTask 试图

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

然后在onPostExecute更新图像

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

如果我正确阅读了帮助,我可以使用publishProgress(Progress...)调用onProgressUpdate (在 UI 线程中执行) ......但是,我可以确定顺序吗?我不在乎时间(如果我必须稍等一下),但我想确保“磁盘进度状态”发生在“在线进度状态”之前

4

3 回答 3

2

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

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

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

于 2013-07-21T13:16:06.703 回答
1

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

这是来自 AsyncTask publishProgress 的代码

sHandler.obtainMessage(MESSAGE_POST_PROGRESS, new AsyncTaskResult<Progress>(this, values)).sendToTarget();
于 2013-07-21T13:15:42.753 回答
1

AsyncTaskRunnable通过将s 发送到主线程来运行 UI 线程上的方法Handler。这Handler需要RunnableFIFO 队列中的每一个,并在没有并行性的情况下依次运行它们。因此,如果磁盘进度状态发生在在线进度状态之前,则publishProgress保留 ' 的顺序。这同样适用于 publishProgress 和 onPostExecute 的顺序。

于 2013-07-21T13:16:30.713 回答