Activity是Android四大组件之一,主要用于应用间共享数据。ContentProvider底层实现是Binder,,从这一点看它天生适合进程间通信(进程内通信也可用)。
优点
- 安全
- 统一了数据访问方式,访问简单高效
- 系统预置了许多ContentProvider,比如通讯录信息,日程表等。
相关概念
使用ContentProvider需要先了解一些概念
URI
MIME
全称Multipurpose Internet Mail Extensions,多功能Internet邮件扩充服务。它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
由类型和子类型组成:
1 | text/html |
MIME可以指定打开什么应用:
Activity的
在android中,MIME是这么规定的
- 必须以vnd开头
- 如果是多条记录,后面接android.cursor.dir/,如果是单条记录,后面接android.cursor.item/
- 最后 加上”vnd.<authority>.<path>“
例子:
对于”content://<authority>/books”这个uri,它对应的类型就可以写成“vnd.android.cursor.dir/vnd.<authority>.books”;
使用步骤
继承ContentProvider类,实现onCreate,query,insert,delete,update,getType(返回MIME类型)6个方法
在AndroidManifest.xml中进行注册
1
2
3
4
5<provider
android:name=".contentProvider.BookProvider"
android:authorities="com.ronaln.processdemo.provider"
android:permission="com.ronaln.processdemo.provider"
android:process=":provider" />android:authorities
: 唯一标识,一般使用<包名>.providerandroid:permission
: 声明权限,外界使用需要访问BookProvider,需要声明权限才可用通过ContentResolver调用query,insert,delete,update方法更新和查询数据
相关类
ContentProvider
- 核心方法query,insert,delete,update操作数据
- 首次使用会执行onCreate方法
- getType方法
- 除了onCreate方法运行在主线程里,不能做耗时操作,其他5个方法均有外界回调并运行在Binder线程池中
- ContentProver可以管理文件(图片,视频,使用MediaStore类实现),表格数据(原生可以使用SQLiteOpenHelper实现),知识表格用的更多一些。
ContentResolver
无论应用定义了多少个ContentProvider,可以由ContentResolver统一管理使用,而无需关注每个ContentProvider细节。ContentUris
操作uriUriMatch
注册uri,通过uri匹配数据ContentObserver