11

裝載機優於異步任務嗎?此外,如何使Android froyo與手機兼容的裝載機。裝載機優於Android中的Asynctask的優勢是什麼?

編輯:

這裏的主要問題是,我不使用本地DB(SqlLite)。在開發服務器上使用數據庫。很明顯,我不能再使用CursorLoader了。 AsyncTaskLoader根本沒有例子。如果有的話,請鏈接。

將所需數據加載到本地數據庫然後使用CursorLoader查詢它是否更好?

+0

也許你沒有在你的應用程序內部實現本地數據庫。但是,您是否要查詢設備本身的數據(即音樂,照片,聯繫人,日曆等)?如果是這樣,那麼你仍然可以使用CursorLoader。 – 2014-01-27 15:14:44

回答

10

是的,裝載機比AsyncTask更有優勢,因爲它們處理AsyncTask所欠缺的很多事情。

  1. AsyncTask中的屏幕方向更改很困難。我曾經有過這樣的問題,直到我使用了一個活動控制類,這個類在配置發生變化時用來保留。如果你想知道如何,我可以給你一些代碼。不過,即使在整個數據加載之前,您改變方向倍數時,該應用也會崩潰。這裏的祕密並不是在第一個線程中加載大量數據,並儘快完成線程任務。即使它發生在後臺,Android也有一種處理線程的簡單方式。你永遠不知道什麼時候你的任務會被殺死。

  2. 即使您使用AsyncTaskLoader,也要確保使用活動管理器。這將幫助您更好地控制活動和AsyncTask。

是的,它在所有舊版本的Android中都兼容。您需要包括支持庫(大部分的時間,這是默認包括在內,但它總是很高興仔細檢查。)

+0

+1 AsyncTasks可以得到討厭。參見[此](http://blogactivity.wordpress.com/2011/09/01/proper-use-of-asynctask/) – slezica 2013-03-13 01:20:43

1

首先,裝載機更容易編碼(它們幾乎內置在碎片中)。 加載器(特別是CursorLoader)也爲您處理光標(如棄用的manageQuery)。

查看此link閱讀關於如何使用Loader pre-Honeycomb。

1

更簡單的實施和照顧很多以前必須用AsyncTasks「手動」完成的生命週期管理。有關更多詳細信息,請參閱此question的答案。

關於將它們與Froyo一起使用,它們可通過兼容性庫獲得。

+0

這裏的問題是我不處理本地數據庫。從開發服務器查詢它。這怎麼可能使用CursorLoader? – Hick 2012-01-31 13:48:24

+0

只注意到你更新你的問題,你有沒有在這裏看到http://developer.android.com/reference/android/content/AsyncTaskLoader.html的AsyncTaskLoader例如 – Kingamajick 2012-01-31 15:35:55

0

裝載機的另一個優點是,它們可以優雅地處理屏幕轉向事件,而異步腳本可以給您帶來麻煩。

0

最大的差異:

CursorLoader將盡快更新UI的內容及其相關ContentProvider更改其內容(例如通過Service),而AsyncTask只會在您告訴它時更新您的UI。

1

看來沒人在談論裝載機的劣勢!我目前正在研究一個在後臺運行其他服務的系統。

我注意到,只要帶有加載程序的屏幕恢復。加載器使用的遊標鎖定數據庫。

它可能不會對大多數人開放,但從sqlite getDatabaseWriter實際上是一個同步的方法,因此加載程序使用的遊標永遠不會關閉,直到加載程序重置或終止,從而鎖定對數據庫的訪問。

我不能建議使用在這些情況下裝載機,也不使用程序的時候,你的結果集由少於100個項目這是靜態的,似乎從未改變過,我可以建議。