Content Providers

这是我对官方文档的一个渣翻译,兼我的学习笔记,原文在此。

Content providers

内容提供器可以帮助应用城西访问它自身存储的数据、其他应用的数据,还可以提供一种方式和其他应用共享数据。它封装好数据,并且提供了安全定义数据的机制。内容提供器是一种标准接口,它将一个进程中的数据与运行在另一个进程中的代码联系起来。实现内容提供器有很多优势。最重要的是,你可以通过配置内容提供器,允许其他应用安全地访问并修改你的数据,如图1所示。


图1:内容提供器如何管理对存储的访问

如果你打算共享数据,使用内容提供器。如果不打算共享数据,你也可以使用它们,因为它们提供了很好的抽象,但也不是必须要使用。通过这种抽象,你可以修改你的应用数据存储实现,而不会影响到那些依赖访问你的数据的现有程序。在这种情况下,只有你的内容提供器受到影响,而不是访问它的程序。例如,你可能要把一个SQLite数据库换成 alternative storage,如图二。


图2:转移内容提供器存储

依赖ContentProvider类的其他类
  • AbstractThreadedSyncAdapter
  • CursorAdapter
  • CursorLoader
    如果你正在使用这些类中的某一个,你还需要在你的程序中实现content provider。要注意,使用sync adapter framework 时,你还可创建stub content provider作为可选方案。要了解关于这个话题的更多信息,查看Creating a stub content provider。另外,有以下这些情况时,你需要你自己的content provider。
  • 你想要在你的程序中实现自定义搜索建议。
  • 你需要使用content provider将你的应用数据显示在widget中。
  • 你想要从你的程序中复制或粘贴复杂数据或文件到其他程序。

Android framework例如content provider会管理音频、视频、图像和个人联系信息等数据。你可以在android.provider包的参考文档中看到他们的一些列表。这些providers可以有限制地访问任何安卓应用。
content provides可以用来管理数据存储资源的变量访问,包括结构化数据如SQLite关系型数据库,以及非结构化数据如图像文件。要获得更多关于android中可获得的存储类型的信息,查看Storage options和Designing data storage。

content providers的优点


content providers可以精确控制访问数据的权限。你可以选择在你的应用中限制对content provider的访问,对从其他应用访问数据完全开放权限,或者对读写数据配置不同权限。要获得更多关于安全使用content providers的信息,可以查看Security tips for storing data和Content provider permissions。
你可以使用content provider,把在你应用中访问不同数据资源的细节抽象出来。例如,你的程序可能会在SQLite数据库中存储视频和音频文件等结构化记录。如果你在你的应用中实现了这个开发模式,你可以使用content provider来访问所有的这种数据。
还要注意,CursorLoader对象借助content provider来运行异步查询,然后返回结果到程序的UI层。了解更多关于在后台使用CursorLoader加载数据的信息,可以查看 Running a query with a CursorLoader。

以下内容说明了更多关于content providers的细节:
Content provider basics
如何使用已有content provider访问并更新数据。
Creating a content provider
如何设计并实现你自己的content provider。
Calendar provider
如何访问属于android平台的Calendar provider。
Contacts provider
如何访问属于android平台的Contacts provider。

有关此页的示例代码,请参照Basic Sync Adapter sample application。

你可能感兴趣的:(Content Providers)