2014-02-05 32 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