AOSP贡献:Sqlite DB的CursorLoader而不是ContentProvider

时间:2015-08-08 20:58:16

标签: android sqlite loader android-cursorloader

为什么Android平台上没有SqliteCursorLoader?这与CursorLoader类似,但对于SQLite DB而不是Content Provider。我在网上找到了一些实现,看起来很有用。

1 个答案:

答案 0 :(得分:2)

  

为什么Android平台上没有SqliteCursorLoader?

因为一个人很难履行Loader合同。 Loader需要做的事情有三件事:

  1. 异步完成工作。这可以通过继承AsyncTaskLoader来处理,因此这里没有真正的问题。

  2. 在配置更改中保留已加载的数据。这是由框架提供的,所以这里没有真正的问题。

  3. 内容更改时自动提供更新的内容。

  4. 第3项是问题所在。这与CursorLoader一起使用的唯一原因是因为ContentProvider系统已经具有ContentObserver的概念,并且已经期望提供者进行适当的通知调用以让系统知道数据更改。

    因此,它不仅需要实现SQLiteCursorLoader,而且还必须确保在您修改数据库的任何地方,您引发一个事件(例如,通过LocalBroadcastManagerLoader 1}}可以监听,以便知道需要重新查询数据库并提供新的Cursor

    现在,出于项目的内部目的,您可能愿意吝啬合同并跳过第3项。那太酷了。但是,由于这种限制,我不建议分发这样的实现(例如,作为开源项目)。这就是为什么我停止了我的SQLiteCursorLoader(除了普遍认为Loader框架是一个失败的抽象)。