2015-08-08 31 views

回答

2

爲什麼android平臺中沒有SqliteCursorLoader?

因爲要履行Loader合同是非常困難的。有三件事情,一個Loader需要能夠做到:

  1. 執行異步工作。這可以通過繼承AsyncTaskLoader來處理,所以這裏沒有真正的問題。

  2. 通過配置更改保留加載的數據。這是由框架提供的,所以這裏沒有真正的問題。

  3. 當內容發生變化時自動發送更新的內容。

項目#3是問題所在。這與CursorLoader一起工作的唯一原因是ContentProvider系統已經具有ContentObserver的概念,並且已經期望提供商進行適當的通知調用以使系統知道數據更改。

所以,它不僅僅是爲實現SQLiteCursorLoader,但也有保證到處您修改數據庫,引發事件(例如,通過LocalBroadcastManager)的Loader可能爲了知道它監聽需要重新查詢數據庫並提供新的Cursor

現在,對於項目的內部目的,您可能願意吝嗇合同並跳過項目#3。這非常酷。但是,由於這種限制,我不建議分發這樣的實現(例如,作爲開源項目)。這就是爲什麼我停止了我的SQLiteCursorLoader(超出了一般認爲Loader框架是一個失敗的抽象)。