• 为什么要使用Content Provider?

    数据访问与安全性
    服务器君一共花费 8.073 ms 进行了 4 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    大名鼎鼎的Content Provider作为Android四大组件之一,和Activity、Service、BroadcastReceiver齐名。Android开发者文档这么说的:

    Content providers manage access to a structured set of data. They encapsulate the data, and provide mechanisms for defining data security.

    Content Providers管理对有结构的数据集的访问。它们封装数据,提供了定义数据安全的机制。

    这个说法似乎太官方了,不好理解。究竟ContentProvider是怎样管理,封装数据呢?又是怎样保证数据安全的?

    通俗的说,ContentProvider是一种数据包装器。它提供统一的接口对数据进行操作,使用者不用关心数据到底是如何存储的以及数据类型到底是什么。ContentProvider将数据封装好了,这样就能方便的管理数据了。它主要用于不同应用间,不同进程间的信息的共享。

    为什么需要ContentProvider?

    大家都知道,涉及到数据的访问就要考虑到数据的安全性。怎样在保证数据的安全性的同时,又能方便的访问数据呢?

    众所周知,Android系统是基于Linux内核的。在Linux中,文件具有如下图中的一系列属性,如文件权限。不同的用户或用户组对文件有不同的读写,执行的权限。如图中的r(Read),w(Write),x(Execute),-(无权限)。

    Android是基于Linux的,也继承了Linux的文件管理方式,通常每个应用都是独立的进程,也就是不同的用户。Android为每个应用程序分配了独立的用户ID和用户组ID。并且由这个应用程序创建出来的文件被赋予了相应的读写权限。其他应用程序无权访问。

    这样就保证了数据的安全性,但是这对数据的共享给第三方造成了不便。Android系统的开发者为了解决了这个问题,设计了ContentProvider类。Content Provider很好的兼顾了二者。

    Android官方的ContentProvider

    Android官方为了便于第三方开发者开发,提供了一些ContentProvider。这些标准的Provider都定义在了android.provider中。

    Content URI

    在了解Content URI之前,先了解下URI:

    URI:通用资源标识符(Uniform Resource Identifier, 简称"URI")主要用于Web上可用的每种资源 -HTML文档、图像、视频片段、程序等 - 进行定位。

    Android上的资源也可以用URI表示。

    文档中是这么描述URI的:

    A content URI is a URI that identifies data in a provider. Content URIs include the symbolic name entire provider (its authority) and a name that points to a table (a path).

    Content URI由三部分组成:"content://"、主机名(或理解为域名authority)、path(路径,其中id可选)。

    例如:

    • 用户字典的单词表:content://user_dictionary/word
    • 设备上存储的所有图片:content://media/internal/images
    • 联系人信息:content://contacts/people
    • 某个人的联系人信息:content://contacts/people/1
    • 使用URI的parse方法将字符串转换为Uri:<Uri uri = Uri.parse("content://com.ijtsai.contactprovider/people");>
更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [计算机算法] 从双端队列引出的卡特兰数 3 个条目
  2. [Python程序设计] Django模板系统 11 个条目
  3. [移动开发] Android加载器Loaders 5 个条目
  4. [Python程序设计] 从PHP到Python 3 个条目
  5. [PHP程序设计] PHP里的引用 5 个条目
  6. [Python程序设计] Django Web环境配置 2 个条目
  7. [PHP程序设计] PHP扩展模块安装 1 个条目
  8. [移动开发] Android属性系统Property 9 个条目
  9. [PHP程序设计] PHP数组的遍历 7 个条目
  10. [PHP程序设计] 声明式编程范式 12 个条目
  11. [数据库技术] 数据库范式篇 5 个条目
  12. [Linux操作系统] CentOS上使用EPEL Repository 2 个条目
窗口 -- [八点]