2012-08-05 42 views
3

查看股票日曆應用程序的源代碼,Google使用IntentService爲數據庫執行內容提供者操作。使用IntentService而不是AsyncQueryHandler有優勢嗎?AsyncQueryHandler vs IntentService?

我認爲,因爲一個處理程序綁定到用戶界面,如果活動被暫停或停止,處理程序也將得到暫停。然而,這似乎並非如此:我創建了一個簡單的內容提供程序和AsyncQueryHandler,它們除了運行一個long for循環之外什麼都不做。當我啓動其他應用程序或終止活動時,for循環仍會運行。

因此,使用IntentService進行異步CRUD操作的優點是服務(作爲服務)有更少的機會被殺死?

更新:我的困惑的一部分是處理程序如何與活動的生命週期相關聯。從我的實驗來看,它似乎是獨立的。

此外,對於那些不熟悉股票日曆應用程序源代碼的人來說,它的工作方式是執行CRUD,它將操作添加到隊列以及對處理程序的引用。然後它啓動彈出隊列並執行CRUD的intent服務。完成後,它通過Message.sendToTarget()調用處理程序。

那麼額外的複雜性會給我們帶來什麼呢?

回答

0

我陷入了同樣的困惑。我發現IntentService會被這個活動所殺死。這也意味着它將在定位變化中被殺死。而一個AsyncQueryHandler將繼續運行(正如你發現的那樣)。在我的使用案例中,我正在更新我的UI,而不等待數據庫更新。所以我想我會選擇AsyncQueryHandler。

我對Intent Service(從來沒有使用過)知之甚少,但是因爲它發送的消息當你需要從數據庫中顯示出來的UI線程時,這可能是有用的..所以你知道數據庫是什麼時候更新。