Android四大组件之——ContentProvider(一)
Android四大组件之——ContentProvider(一)
本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论。
欢迎转载,转载请注明网址:http://www.cnblogs.com/JohnTsai
个人博客地址:http://johntsaiandroid.github.io
目录
- 1.ContentProvider
* 1.1ContentProvider简介
* 1.2为什么有ContentProvider
* 1.3Android官方的ContentProvider - 2.Content URI
1.ContentProvider
相信大家都知道大名鼎鼎的ContentProvider,作为Android四大组件之一,和Activity、Service、BroadcastReceiver齐名。
今天就和大家一起来学习一下ContentProvider。
1.1ContentProvider简介
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将数据封装好了,这样就能方便的管理数据了。它主要用于不同应用间,不同进程间的信息的共享。

1.2为什么有ContentProvider?
大家都知道,涉及到数据的访问就要考虑到数据的安全性。怎样在保证数据的安全性的同时,又能方便的访问数据呢?
众所周知,Android系统是基于Linux内核的。在Linux中,文件具有如下图中的一系列属性,如文件权限。不同的用户或用户组对文件有不同的读写,执行的权限。如图中的r(Read),w(Write),x(Execute),-(无权限)。

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

这样就保证了数据的安全性,但是这对数据的共享给第三方造成了不便。Android系统的开发者为了解决了这个问题,设计了ContentProvider类。Content Provider很好的兼顾了二者。
1.3Android官方的ContentProvider
Android官方为了便于第三方开发者开发,提供了一些ContentProvider。这些标准的Provider都定义在了android.provider中。

2.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");>
Android四大组件之——ContentProvider(一)的更多相关文章
- Android 四大组件之" ContentProvider "
前言 ContentProvider作为Android的四大组件之一,是属于需要掌握的基础知识,可能在我们的应用中,对于Activity和Service这两个组件用的很常见,了解的也很多,但是对Con ...
- 【Android开发日记】之入门篇(九)——Android四大组件之ContentProvider
数据源组件ContentProvider与其他组件不同,数据源组件并不包括特定的功能逻辑.它只是负责为应用提供数据访问的接口.Android内置的许多数据都是使用ContentProvider形式,供 ...
- 初学android:四大组件之contentprovider
一.ContentProvider的概念ContentProvider:为存储和获取数据提供统一的接口.可以在不同的应用程序之间共享数据.Android已经为常见的一些数据提供了默认的ContentP ...
- Android四大组件之contentProvider
Activity,Service,broadcast and Contentprovider android 4 大组件. ContentProvider:使用: public class Image ...
- android四大组件之ContentProvider(一)
ContentProvider学习笔记 1. ContentProvider基本概念 ContentProvider向我们提供了我们在应用程序之间共享数据的一种机制,虽然采用文件和SharedPref ...
- Android 四大组件之四(ContentProvider)
ContentProvider调用关系: ContentProvider(数据提供者)是应用程序之间共享数据的一种接口机制,是一种更为高级的数据共享方法. ContentProvider可以指定需要共 ...
- android四大组件之ContentProvider(二)
ContentProvider学习笔记 上一章节我们编写了自定义的一个StudentProvider,他提供了两种供外界访问数据的方式,content://come.demo.sqlite.stude ...
- Android四大组件之contentProvider(续)
1.content provider与网页有何相似之处? contentProvider使用authority 同网站的域名类似 contentProvider还可以提供类似于网站的索引方式 ...
- [Android]Android四大组件之ContentProvider
URI简介 URI(Universal Resource Identifier),又被称为"通用资源标志符". URI由许多部分所组成,示例及解说如下: Content URIs介 ...
随机推荐
- iOS实现tableViewCell或collectionCell中点击界面按钮跳转
//找到父类界面 - (UIViewController *)viewController { for (UIView* next = [self superview]; next; next = n ...
- http://www.apple.com/customer-letter/
Typora Writingshtml, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: ...
- OCMock 3 参考
Typorahtml, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMirror-scroll { ...
- Postgresql查询表的大小
--数据库中单个表的大小(不包含索引) select pg_size_pretty(pg_relation_size('表名')); --查出所有表(包含索引)并排序 SELECT table_sch ...
- Linux下用文件IO的方式操作GPIO(/sys/class/gpio)
通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction ...
- Jquery调用ajax参数说明
代码中有详细注释,直接上代码. 注释掉的选项,一般用不到,直接用最基本的部分就可以了. $.ajax({ // 请求的URL url: '../Daily/Daily_Report', //HTTP ...
- Redis PHP连接操作
安装 在PHP程序中使用Redis,需要确保我们有Redis的PHP驱动程序和PHP安装设置在机器上.可以查看PHP教程教你如何在机器上安装PHP.现在,让我们来看看一下如何设置Redis的PHP驱动 ...
- JAVA多线程笔试题
一.题目内容 二.我的答案 利用了线程池.考虑了超时处理.不知道这样写是否还有其他问题,或者更好更优的解决方案? import java.util.*; import java.util.concur ...
- FPGA内部动态可重置PLL讲解(一)
SDRAM驱动需要两个时钟,一个是控制时钟,一个是驱动时钟,这两个时钟有一个相位差,如何产生高精度的时钟是SDRAM能够正常工作的关键,采用FPGA内部动态可重置PLL生成SDRAM所需要的时钟频率. ...
- Numpy 的数组转置和轴对换
数组转置 转置(transpose)是重塑的一种特殊形式, 它返回的是源数据的视图(不会进行任何操作.)数组不仅有transpose,还要特殊的T属性 计算矩阵内积 高维数组transpose 详细讲 ...