ContentProvider

参考 https://blog.csdn.net/u012858833/article/details/51629245

ContentProvider管理android以结构化方式存放的数据。他以相对安全的方式封装数据并且提供简易的处理机制。Content provider提供不同进程间数据交互的标准化接口。

ContentProvider是允许不同应用进行数据交换的标准的API,ContentProvider以Uri的形式对外提供数据的访问操作接口,而其他应用则通过ContentResolver根据Uri去访问指定的数据。

一旦某个应用通过ContentProvider暴露了自己的数据接口,那么不管该应用程序是否启动,其他程序都可以通过该接口来操作自己的数据接口来操作其内部的数据,包括增加数据,删除数据,修改数据,查询数据等.

URI是统一资源标识符,是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。由是三个组成部分:访问资源的命名机制、存放资源的主机名、资源自身的名称,由路径表示。

比如:content://edu.android.demos/t_apps 中:

  • content:// 使用的是content协议,属于默认规定
  • edu.android.demos属于自己定义的主机名,唯一标识并区分不同的ContentProvider继承类
  • t_apps资源部分,当访问不同的资源的时候,这部分会动态改变

ContentProvider的使用离不开Uri类的支持,在自己的继承类中使用UriMatcher,根据UriMatcher.match(Uri uri)返回的表示符,进行不同范围,不同数据集的操作。

一旦定义好自己的ContentProvider类,就可以使用ContentResolver进行访问操作了。 ContentResolver类的方法都会在其内部调用URI主机部分确定的ContentProvider

监听ContentProvider相关的数据变化(ContentObserver类)

使用ContentObserver可以监测某一数据项的变化,当其中的内容发生变化是会自动调用其中的 public void onChange(boolean selfChange) {}方法。 比如可以监听手机中的短信变化,在变化后进行处理

1、请介绍下 ContentProvider 是如何实现数据共享的
在 Android 中如果想将自己应用的数据(一般多为数据库中的数据)提供给第三发应用,那么我们只能通过 ContentProvider 来实现了。
ContentProvider 是应用程序之间共享数据的接口。使用的时候首先自定义一个类继承ContentProvider,然后覆写 query、insert、update、delete 等方法。因为其是四大组件之一因此必须在 AndroidManifest 文件中进行注册。把自己的数据通过 uri 的形式共享出去。android 系统下,不同程序 数据默认是不能共享访问。需要去实现一个类去继承 ContentProvider
public class PersonContentProvider extends ContentProvider{
public boolean onCreate(){

}
query(Uri, String[], String, String[], String)
insert(Uri, ContentValues)
update(Uri, ContentValues, String, String[])
delete(Uri, String, String[])
}
<provider
android:exported="true"
android:name="com.itheima.contenProvider.provider.PersonContentPro
vider"android:authorities="com.itheima.person" />
第三方可以通过 ContentResolver 来访问该 Provider。

2、说说 ContentProvider、ContentResolver、ContentObserver 之间的关系
a. ContentProvider 内容提供者,用于对外提供数据
b. ContentResolver.notifyChange(uri)发出消息
c. ContentResolver 内容解析者,用于获取内容提供者提供的数据
d. ContentObserver 内容监听器,可以监听数据的改变状态

e. ContentResolver.registerContentObserver()监听消息

3、为什么要用 ContentProvider?它和 sql 的实现上有什么差别?
ContentProvider 屏蔽了数据存储的细节,内部实现对用户完全透明,用户只需要关心操作数据的uri 就可以了,ContentProvider 可以实现不同 app 之间共享。
Sql 也有增删改查的方法,但是 sql 只能查询本应用下的数据库。而 ContentProvider 还可以去增删改查本地文件. xml 文件的读取等。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值