2017-01-20 32 views
-1

與AsyncTask的doInBackground()類似,asynctask loader的回調方法onLoadFinished()將在後臺運行並獲取來自URL的響應,然後將響應發送到LoaderManager的onLoadFinished()以將響應附加到視圖,這些視圖可能會或可能不會在主UI線程上運行。類似於onPostExecute()。如果我使用AsynctaskLoader或LoaderManager,我想知道這裏真正的優勢是什麼即使asyncTask的doInBackground在後臺運行,那麼AsyncTask loader的loadInBackground()方法的優勢是什麼

+0

'AsyncTask'對於Activity Life Cycle來說並不是一個好兆頭。例如,如果'AsyncTask'正在運行,並且用戶旋轉設備並重新啓動活動,則會看到一些奇怪的行爲。原因是'AsyncTask'仍然掛在onRotate期間銷燬的Activity的前一個實例上。 'AsyncTaskLoader'旨在解決這個問題。 –

回答

0

他們有不同的目的。 LoaderManager用戶從一些來源加載數據。 AsyncTask只是用來在後臺執行某些操作。

Here是對此的一些解釋。正如你所看到

  • 如果直接在活動或片段獲取數據,你 用戶將從缺乏響應遭受由於從UI線程執行 可能慢查詢。
  • 如果你從另一個線程獲取數據,也許的AsyncTask, 那麼你負責管理線程和UI線程 通過各種活動或片段生命週期事件,如 的onDestroy()和配置的改變兩者。

而且還

裝載機解決這些問題,包括其他福利。例如:

  • 加載程序在單獨的線程上運行以防止janky或無響應的UI。

  • 當發生事件時,加載程序通過提供回調方法來簡化線程管理。

  • 加載程序在配置更改中保留並緩存結果以防止重複查詢。
  • 加載程序可以實現一個 觀察器來監視基礎數據源中的更改。例如,對於 示例,CursorLoader會自動註冊一個ContentObserver到 ,當數據更改時觸發重新加載。
相關問題