2013-07-21 142 views
0

我有嘗試使用的AsyncTask onProgressUpdate更新UI

  1. 一個的AsyncTask
  2. 檢查是否有更新的在線

然後找到磁盤上的圖像中onPostExecute更新圖像

我想更新鏡像(即同步到UI線程)後,檢查磁盤(這是快速,但仍然要慢在例如李stView getView)並在線檢查後。

如果我正確讀取的幫助下,我可以叫onProgressUpdate使用publishProgress(在UI線程中執行)(進展...) ...但是,我可以肯定的順序?我不在乎計時(如果我必須等一會兒),但我想確保「磁盤進程狀態」發生在「在線進程狀態」之前

回答

1

如果我正確地理解了你,詢問是否執行publishProgress以相同順序調用onProgressUpdate。答案是肯定的,因爲它通過處理程序向UI線程發佈消息。

下面是從的AsyncTask publishProgress

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

謝謝大家。我得到它的工作! :) – Tom

2

代碼這完全由你來決定,當你調用publishProgress(),你傳遞給它什麼樣的參數。

如果你想從後臺線程調用兩次 - 一次在磁盤檢查之後,一次在網絡檢查之後 - 那很好。要區分onProgressUpdate()中的兩個調用,只需跟蹤您所處的狀態,或保留已調用該函數的次數即可。

UI線程上的調用將與您在後臺線程中調用publishProgress()的調用順序相同。

1

AsyncTask通過向主線程Handler發送Runnable s來運行UI線程上的方法。這個Handler需要FIFO隊列中的每個Runnable並且在沒有並行性的情況下依次運行它們。因此,如果磁盤進度狀態發生在在線進程狀態之前,那麼publishProgress的順序被保留。 這同樣適用於publishProgress和onPostExecute的順序。

相關問題