Android系统。内容提供商或数据库?

时间:2010-11-22 08:45:22

标签: android sqlite android-contentprovider

我对这个问题感到有点困惑,如果最好使用ContentProviderDatabase。或者,如果我不想与其他应用程序共享任何数据,则没有任何区别。

如果我理解正确,内容提供商基于SQLite数据库,并且它们的内容也可能只能用于我的应用程序。

你能解释一下吗?

非常感谢,

穆尔

3 个答案:

答案 0 :(得分:49)

提供商确实是一个有价值的问题,特别是对于跨应用程序数据发布。例如,您需要使用内容提供商向快速搜索框提供搜索建议。

但是,对于应用程序内部使用,我不是粉丝。成本(例如,灵活性降低,额外管理费用)超过了恕我直言的好处。

如果您确实实施了内容提供商,请记住,其他应用 默认情况下 可以访问它们。您需要在android:exported="false"元素中加入<provider>,才能将其设为您应用的私密状态。

答案 1 :(得分:12)

使用内容提供商可以为您提供更加模块化的设计,如果您将来某个时候希望从其他应用程序获取数据,可以让您的生活更轻松。 如果您确定只需要从一个应用程序获取数据,您也可以直接在数据库上运行。

您应该注意一个特定的SQLite限制,那就是SQLite只是单用户。这实际上意味着您需要保护您的数据库不会同时从多个线程访问。这在内容提供者中通常不是问题,因为它们几乎总是具有单线程实现。

答案 2 :(得分:0)

使用内容提供商的原因是here

总结:

  1. 轻松更改基础数据源(您可以将数据库从Sqlite更改为Mongo或更改为JSON文件,而无需更改任何应用程序)
  2. 利用某些Android类的功能(SyncAdapter,Loaders,CursorAdapter) - 这些类需要内容提供商,如果您没有,则无法使用它们
  3. 允许许多应用安全地访问,使用和修改单个数据。 (这是使用它的主要原因)