私人内容提供商有什么用途?

Android 开发指南说

内容提供者也可用于读取和写入应用程序专用的数据,而不是共享数据。

内容提供者通常用于向不同的应用程序提供数据或在其间共享数据。 我想知道是否有任何使用私人提供商,不想分享它。 提供直接访问数据库或文件系统没有提供什么好处?

谢谢,拉加斯

  1. 它会自动调度后台线程中的所有服务器端和同步数据库访问。 但是,在您的应用程序前端中,默认情况下,内容parsing器/提供程序通常会从UI线程执行查询/事务。 您必须asynchronous执行所有事务(即使用CursorLoader )以确保您的应用程序在UI侧平稳运行
  2. 它可以从通过ContentProvider访问的任何线程本地化重新访问数据库访问,以便所有locking可以完全在您的ContentProvider重写调用中发生,而不是在数据库层,服务和UI层中跟踪它。
  3. 作为上面的一部分,它还为您的数据提供了一个很好的单例接口 – 如果您的应用程序中有十个Activity类,则只需通过ContentResolver静态调用,而不需要处理在其中打开/closuresSQLiteDatabase每个活动都是从应用中的一个活动跳到另一个活动。
  4. ContentProvider与SyncAdapter模型非常紧密的联系在一起 – 这意味着如果你想让你的数据库与服务器托pipe的数据库保持同步,那么这是唯一的方法。 (你的应用程序镜像REST apitypes的情况)
  5. 它与ContentResolver的ContentObserver接口相关联 – 这是一个接口(在其他许多有用的东西中),一个视图可以注册为观察特定的一组数据(通过光标到该数据)。 然后,如果将更改传送到ContentProvider,则CP可以通知CR,CR可以反过来通知任何相关的游标,这又会重新查询并导致视图更新。 这比手动跟踪你的视图要干净得多,所以你可以使它失效并重新绘制它们。

至于数据库的重入locking,它并没有完全实现,但它有帮助 – 你的ContentProvider类实现了四个简单的函数(CRUD接口),如果你select覆盖它,第五个batchAdd() – 这使您的locking本地化。 简单的答案是简单地在函数级别标记所有四个/五个函数声明“同步”,你就完成了。 比试图从5个不同的Activite中访问您的数据库的20个位置locking出来要干净得多。

例如,多进程应用程序使用场景(如:音乐播放服务通常运行在远程进程中),在一个应用程序共享数据库中的两个进程之间应该使用私有的ContentProvider。