为什么Android平台上没有SqliteCursorLoader?这与CursorLoader类似,但对于SQLite DB而不是Content Provider。我在网上找到了一些实现,看起来很有用。
答案 0 :(得分:2)
为什么Android平台上没有SqliteCursorLoader?
因为一个人很难履行Loader
合同。 Loader
需要做的事情有三件事:
异步完成工作。这可以通过继承AsyncTaskLoader
来处理,因此这里没有真正的问题。
在配置更改中保留已加载的数据。这是由框架提供的,所以这里没有真正的问题。
内容更改时自动提供更新的内容。
第3项是问题所在。这与CursorLoader
一起使用的唯一原因是因为ContentProvider
系统已经具有ContentObserver
的概念,并且已经期望提供者进行适当的通知调用以让系统知道数据更改。
因此,它不仅需要实现SQLiteCursorLoader
,而且还必须确保在您修改数据库的任何地方,您引发一个事件(例如,通过LocalBroadcastManager
)Loader
1}}可以监听,以便知道需要重新查询数据库并提供新的Cursor
。
现在,出于项目的内部目的,您可能愿意吝啬合同并跳过第3项。那太酷了。但是,由于这种限制,我不建议分发这样的实现(例如,作为开源项目)。这就是为什么我停止了我的SQLiteCursorLoader
(除了普遍认为Loader
框架是一个失败的抽象)。