ContentProvider、ContentObserve、ContentResolverr三者之间的关系

1. ContentPRrovider:

ContentProvider在android中的作用是对外共享数据, 也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对你应用中的数据 进行添删改查。关于数据共享,以前我们学习过文件操作模式,知道通过指定文件的操作模式为Context.MODE_WORLD_READABLE或 Context.MODE_WORLD_WRITEABLE同样也可以对外共享数据。

那么,这里为何要使用ContentProvider对外共享数据 呢?

是这样的,如果采用文件操作模式对外共享数据,数据的访问方式会因数据存储的方式而不同,导致数据的访问方式无法统一,如:采用xml文件对外共享数 据,需要进行xml解析才能读取数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读取数据。
使用ContentProvider对外共享数据的好处是统一了数据的访问方式。

1.1、四大组件的内容提供者,主要用于对外提供数据

1.2、实现各个应用程序之间的(跨应用)数据共享,比如联系人应用中就使用了ContentProvider(我在上篇ContentProvider是如何实现数据共享的?—— ContentProvider数据共享案例中提供了一个简单的删除联系人的案例)。其实它也只是一个中间人,真正的数据源是文件或者SQLite等。

1.3、一个应用实现ContentProvider来提供内容给别的应用来操作,通过ContentResolver来操作别的应用数据,当然在自己的应用中也可以。

1.4、负责管理结构化数据的访问;

1.5、封装数据并且提供一套定义数据安全的机制;

1.6、是一套在不同进程间进行数据访问的接口;

1.7、为数据跨进程访问提供了一套安全的访问机制,对数据组织和安全访问提供了可靠的保证;

2. ContentResolver:

ContentResolver可以不同URI操作不同的ContentProvider中的数据,外部进程可以通过ContentResolver与ContentProvider进行交互。

2.1、内容解析者,用于获取内容提供者提供的数据

2.2、ContentResolver.notifyChange(uri)发出消息

3. ContentObserver:

观察ContentProvider中的数据变化,并将变化通知给外界。

3.1、内容监听器,可以监听数据的改变状态

3.2、目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。触发器分为表触发器、行触发器,相应地ContentObsever也分为表ContentObserver、行ContentObserver,当然这是与它所监听的Uri MIME Type有关的

3.3、ContentResolver.registerContentObserver()监听消息

发表回复

后才能评论