Android ContentProvider用法解惑

王正一
  • 1.6k

ContentProvider作为Android四大组件之一,顾名思义都知道他是用来在进程间传递数据的。但是,我有疑问了。我实现了一个闹钟应用,自定义的数据库,开始我使用了SQLiteOpenHelper的writedb直接读写了数据库,没使用ContentProvider。但是,目前一个新的需求是要求外部能够增删改查闹钟,所以,我又必须提供ContentProvider,是不是意味着之前用writedb读写的操作全部需要用ContentProvider重新实现一遍?

回复
阅读 2.9k
3 个回答
✓ 已被采纳

不好意思,又自问自答了。这个问题我已经在代码层面解决,解决方案是:

  1. 如果ContentProvider的update、insert、delete会影响到UI的显示,那代码中就不能直接操作DB了,而应该统一使用ContentProvider,同时需要注册ContentObserver进行Uri的监听,以便切换UI。

  2. 如果ContentProvider的操作不会影响UI,那就无所谓了。内部直接操作DB也是可以的。

根据ContentProvider定义,它是在不同应用中进行数据交换的标准API,当一个应用需要把数据暴露给其他应用时可以使用它,而其他应用可以通过ContentResolver去操作暴露的数据,通过ContentProvider暴露自己的数据操作接口,其他应用就可以通过该接口进行相应的增删改查操作。但通过ContentResolver操作本质就是调用了ContentProvider的操作,而其中的操作使用的还是SQLiteOpenHelper的db。所以个人认为不需要重写,不过这也是个人观点,还是要你自己去试试就知道结果了。

应该是的,直接通过数据写的数据是应用私有数据,其他应用无法访问,不过如果DB文件在SD卡里面进行操作就好像可以访问。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏