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

时间:2011-04-02 13:46:30

标签: android data-storage android-contentprovider

Android Dev Guide

  

内容提供商也很有用   读取和写入数据   私有你的应用程序,而不是   共享。

通常,内容提供商用于向不同的应用程序提供数据或在它们之间共享数据。我想知道私人提供商是否有任何用处并且不想分享它。如果没有直接访问DB或文件系统,是否有任何好处?

谢谢, Rajath

2 个答案:

答案 0 :(得分:78)

  1. 它会在后台线程中自动安排所有服务器端和同步数据库访问。但是,在应用程序前端中,内容解析器/提供程序通常会默认从UI线程执行查询/事务。您必须异步执行所有事务(即使用CursorLoader)以确保您的应用程序在UI端顺利运行
  2. 它从通过ContentProvider访问的任何线程本地化重入数据库访问,这样所有锁定都可以完全在您的ContentProvider覆盖调用中发生,而不是在DB层,服务中跟踪它和一个UI层。
  3. 作为上述内容的一部分,它还为您的数据提供了一个很好的单例接口 - 如果您的应用中有10个Activity类,您只需要通过每个的ContentResolver静态调用,而不是需要处理打开/关闭当您从应用程序中的一个活动跳转到另一个活动时,每个活动中的SQLiteDatabase。
  4. ContentProvider与SyncAdapter模型紧密相关 - 这意味着如果您想让数据库与网络上的服务器托管数据库保持同步,这几乎是唯一的方法。 (您的应用镜像REST api类型的情况)
  5. 它与ContentResolver的ContentObserver接口相关联 - 这是一个接口,其中(在许多其他有用的东西中)视图可以注册为观察一组特定的数据(通过Cursor到该数据)。然后,如果您将更改驱动到ContentProvider,则CP可以通知CR,CR又可以通知任何相关游标,而游标又会重新查询并导致视图更新。这比必须手动跟踪您的视图更加清晰,因此您可以使它们无效并重绘它们。
  6. 对于数据库的重入锁定,它不能完全执行,但它有帮助 - 您的ContentProvider类实现了四个简单的函数(CRUD接口),如果您选择覆盖它,则第五个,batchAdd () - 这会使您的锁定本地化。骨简单的答案是简单地在功能级别标记所有四个/五个功能声明“synchronized”并完成。比试图从5个不同的活动中访问你的数据库的20个地方找出锁定要清楚得多。

答案 1 :(得分:1)

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