我目前正在开发一个SQLite代码库,其中包含一个可以容纳大量记录的表。它有很多记录,使用LoaderManager
异步检索Cursor
个对象变得很慢,在ListView
CursorAdapter
中显示它们。
如果要查询的表中有一行更改,则会通知LoaderManager
,并检索新的Cursor
。但是,这似乎效率低下,因为Cursor
查询表中ListView
的所有行。 GUI没有被阻止,因为Cursor
加载是在另一个线程中完成的,问题是表行的检索可能需要一段时间。在显示新记录信息之前,5-10秒可以通过一些较慢的电话。
我正在尝试找到一种方法来有效地检索行更改以更新ListViews
的行,而无需重新加载所有内容。
我已经考虑将我的代码重写为内部ContentProvider
(隐藏SQLiteDatabase
),因为我已经看到它可以与应用的ContentResolver
一起使用来发送单个行更改通过notifyChange()
发送通知。
如果我切换到ContentProvider
,它会像我假设的那样高效吗?在单个记录更改后,ContentProvider
是否可以发送允许ListView
仅重新加载行更改信息的事件,而不需要完整重新查询所有表信息?
答案 0 :(得分:1)
实现ContentProvider的query()方法时返回自定义。 AbstractWindowedCursor,即使最终数据集很大,你只需要填充小窗口