Android ContentProvider

参考
Android组件之ContentProvider
ContentProvider

一、概述

在Android系统中有多个应用程序,如果需要在不同程序之间共享数据,甚至是同一个程序中不同组件之间的数据共享都可以有多种方式,例如A程序将需要共享的数据写入到SD卡文件,B程序就可以从文件访问A程序的共享数据了,也可以通过其它方式.但是如果每个程序都以自己的方式来共享数据,访问者就必须要事先知道你是用什么方式共享数据的,这样就会很麻烦.

为了解决这样的问题,Android系统提供了一种统一的共享及访问数据的方式,这就是ContentProvider.ContentProvider是应用程序中或者不同应用程序之间进行数据交换的标准API.

在真正的开发中我们很少去自定义一个ContentProvider因为ContentProvider是为了更好的去共享数据,我们在开发中很少会遇到这种情况,而遇到更多的则是访问系统的ContentProvider,系统的ContentProvider谷歌工程师已经帮我们写好了,我们直接使用就可以了。

二、数据交换所需要的三个必要条件和一个可选项
  • ContentProvider:内容提供者,APP以这种形式对外提供数据
  • ContentResolver:内容访问者,APP以这种形式访问其它内容提供者所共享的数据
  • ContentObserver:内容观察者,APP以这种形式监听目标数据有没有发生改变.
  • Uri:提供者与访问者之间交换数据的协议标准.

ContentProvider
既然需要以统一的方式对外提供数据操作方式,那就必须要有统一的操作接口,这就是ContentProvider所要做的事,它会提供query()、insert()等标准操作方法让我们去实现,至于该如何操作数据,那就是程序员自己的事了.

ContentResolver
既然别人提供了统一的数据操作接口,那么我们去操作这些数据时也必须要按统一的方式,不是想怎么操作就怎么操作.这就是ContentResolver的事了,它会提供query()、insert()方法通过uri让我们去操作目录数据,实际上就是通过Uri来间接里操作ContentProvider()中的query()、insert()等方法.

ContentObserver
有时候会有这种需求,就是当目录数据发生改变的时候,我才需要去访问这些需要的数据,而不是我一直通过轮询的方式隔一段时间就去看看数据有没有改变,不仅操作复杂而且会消耗很多资源浪费手机电量.所以Android为我们提供了内容观察者,当数据一发生改变,内容观察者就会通过Uri发出数据改变的消息,从而让对该Uri进行监听的程序获取改变的消息.

你可能感兴趣的:(Android ContentProvider)