目录
1. 内容提供器是什么
内容提供器(即ContentProvider
)是Android四大组件之一,属于共享型组件
,用于同其他组件甚至其他应用程序进行数据共享
。我们不仅可以通过现有的ContentProvider
来获取其应用程序中的数据,也可以自定义自己的ContentProvider
并为它创建一个供外部访问的接口用来提供数据。ContentProvider
需要在AndroidManifest.xml
中注册,但不需要通过Intent
启动。
2. 内容提供器的实现原理
ContentProvider
的实现原理:Android中的Binder机
制。这里放上Carson_Ho大神的文章,推荐阅读:图文详解 Android Binder跨进程通信的原理。涉及到Linux基础知识,包括进程划分、跨进程通讯(IPC)和内存映射等,希望以后能写篇文章总结。
3. 内容提供器的基本用法
知道了ContentProvider
的实现原理了,接下来当然是怎么运用ContentProvider
了。我们知道ContentProvider
用于数据共享
,那么数据共享
的步骤是怎样的呢?没错,首先就是要打包需要共享的数据,这时候就要用到URI
。
3.1 URI
URI
(Uniform Resource Identifier
),即统一资源标识符。用于唯一标识ContentProvider
和其中的数据。下面介绍一下URI的组成:
- 主题(
Schema
):Android中 ContentProvider 的 URI前缀 - 权限(
Authority
): ContentProvider 的 唯一标识符(一般为 包名 ) - 路径(
Path
): ContentProvider 指向数据库中的一个 表(一般为 表名 ) - 记录(
ID
): 表 中的一条 记录(省略时表示返回所有记录)
现在我们能用URI字符串
清楚地表示需要打包的数据了,接下来就是通过Uri.parse()
方法将URI字符串
解析成Uri对象
:
Uri uri = Uri.parse("content://com.macardo.contentprovider.provider/User");
打包好数据之后就可以对数据进行增删查改
了,下面介绍ContentProvider
用到的几个常用类。
ContentProvider 和 ContentResolver 为两个主要类:
主要类 | 作用 |
---|---|
ContentProvider | 定义增删改查方法 |
ContentResolver | 统一管理不同ContentProvider 间的操作 |
UriMatcher 、ContentUris 和 ContentObserver 是为了辅助 ContentProvider 的工具类:
工具类 | 作用 |
---|---|
UriMatcher | 在ContentProvider 中注册URI |
ContentUris | 操作 URI |
ContentObserver | 观察 URI 引起 ContentProvider 中的数据变化并通知外界 |
3.1 ContentProvider类
ContentProvider
类用于定义增删改查方法。
创建自定义ContentProvider
时,需要重写以下6个方法:
// 以下方法均运行在ContentProvider进程的主线程,故不能做耗时操作