2014-02-05 34 views
0

我目前正在使用一個可以容納大量記錄的SQLite代碼庫。它有很多記錄,因此使用LoaderManager異步檢索Cursor對象的速度變慢,以CursorAdapter顯示ListView在Android上實現高效的ContentProvider

如果查詢表中有一行更改,則通知LoaderManager,並檢索新的Cursor。但是,這似乎效率低下,因爲Cursor查詢表中的所有行爲ListView。 GUI未被阻塞,因爲Cursor加載正在另一個線程中完成,問題在於檢索錶行可能需要一段時間。在顯示新的記錄信息之前,5-10秒可以傳遞一些較慢的電話。

我試圖找到一種方法來高效地檢索行更改,以更新ListViews的行而無需重新加載所有內容。

我看着我重寫代碼作爲內部ContentProvider(隱藏SQLiteDatabase),因爲我已經看到它可以與應用程序的ContentResolver通過notifyChange()發出單獨的行更改通知使用。

如果我切換到ContentProvider,它會像我所假設的那樣高效嗎?在單個記錄更改後,ContentProvider是否可以發出允許ListView僅重新裝載行更改信息的事件,而不需要重新查詢所有表信息?

回答

1

當你的ContentProvider實現query()方法時返回一個自定義。 AbstractWindowedCursor,即使最終的數據集很大,你只需填充小窗口

+0

我可以在不重寫的情況下使用'AbstractWindowedCursor'來使用'ContentProvider';或者'AbstractWindowedCursor'需要'ContentProvider'存在? –

+0

不,您可以將它作爲獨立使用遊標,不需要ContentProvider – pskink