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

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

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

你能解释一下吗?

非常感谢你,

穆尔

  • 如何使用Async Task执行数据库操作
  • 从Android Studio浏览SQLite数据库
  • 数据库处理停止在Android 2.2.1上工作(Desire HD 1.72.405.3)
  • SQLiteQueryBuilder.query()vs SQLiteDatabase.query()
  • Android的SQLiteDatabase中的冲突解决方案
  • 脱机Android应用程序与在线同步
  • Android Sqlite获取最后一个插入行id
  • 如何将Room Persistence Library导入Android项目
  • 当然,提供商是一个解决方案的有价值的问题,特别是对于跨应用程序数据发布。 例如,您需要使用内容提供商向快速搜索框提供搜索建议。

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

    如果您确实实现了内容提供程序,请记住默认情况下其他应用程序可以访问它们。 您需要在元素中包含android:exported="false" ,以使其对您的应用程序保密。

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

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

    使用内容提供商的原因在这里 。

    综上所述:

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