在Android上实现高效的ContentProvider

时间:2014-02-05 15:01:03

标签: android database sqlite listview

我目前正在开发一个SQLite代码库,其中包含一个可以容纳大量记录的表。它有很多记录,使用LoaderManager异步检索Cursor个对象变得很慢,在ListView CursorAdapter中显示它们。

如果要查询的表中有一行更改,则会通知LoaderManager,并检索新的Cursor。但是,这似乎效率低下,因为Cursor查询表中ListView的所有行。 GUI没有被阻止,因为Cursor加载是在另一个线程中完成的,问题是表行的检索可能需要一段时间。在显示新记录信息之前,5-10秒可以通过一些较慢的电话。

我正在尝试找到一种方法来有效地检索行更改以更新ListViews的行,而无需重新加载所有内容。

我已经考虑将我的代码重写为内部ContentProvider(隐藏SQLiteDatabase),因为我已经看到它可以与应用的ContentResolver一起使用来发送单个行更改通过notifyChange()发送通知。

如果我切换到ContentProvider,它会像我假设的那样高效吗?在单个记录更改后,ContentProvider是否可以发送允许ListView仅重新加载行更改信息的事件,而不需要完整重新查询所有表信息?

1 个答案:

答案 0 :(得分:1)

实现ContentProvider的query()方法时返回自定义。 AbstractWindowedCursor,即使最终数据集很大,你只需要填充小窗口