一、Android如何实现数据共享?
为了在应用程序之间交换数据,Android提供了ContentProvider,ContentProvider是不同应用程序之间进行数据交换的标准API,当一个应用程序需要把自己的数据暴露给其他程序使用时,该应用程序就可通过提供ContentProvider来实现,其他的应用程序就可以通过ContentResolver来操作ContentProvider暴露的数据。一旦某个应用程序通过ContentProvider暴露了自己的数据操作接口,那么不管该应用程序是否启动,其他应用程序都可以通过该接口来操作该应用程序的内部数据,包括增加数据、删除数据、修改数据、查询数据等。
总结:A应用通过ContentProvider暴露自己的数据,B应用通过ContentResolver来操作ContentProvider暴露的数据。
A应用以某种Uri的形式对外提供数据,B应用使用ContentResolver根据A应用提供的Uri获得A应用的authority 属性去访问操作指定的数据。
转载请表明出处:http://blog.youkuaiyun.com/u012637501(嵌入式_小J的天空)
二、ContentProvider与
ContentResolver简介
1.功能:
(1)ContentProvider是不同应用程序之间进行数据交换的标准API,ContentProvider以某种Uri的形式对外提供数据,运行其他应用访问或修改数据,即其他应用程序使用ContentResolver根据Uri去访问操作指定数据, UriMatcher类用于帮助解
析URI。在实际应用中,自定义的ContentProvider类除了需要继承ContentProvider之外,还需要同时实现以下方法(均为抽象方法):
- abstract boolean onCreate()
- abstract Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
-abstract Uri insert(Uri uri, ContentValues values)
- abstract int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
- abstract int delete(Uri uri, String selection, String[] selectionArgs)
- abstract String getType(Uri uri)
(2)Contentprovider相当于一个"网站",它的作用是暴露可供提供操作的数据。其他应用程序则通过ContentResolver来操作ContentProvider所暴露的数据,即ContentResolver相当于HttpClient。
一般来说,ContentProvider是单实例模式,当多个应用程序通过ContentResolver来操作ContentProvider提供的数据时,ContentResolver调用的数据操作将会委托给同一个ContentProvider处理。
升华笔记1:ContentResolver是如何实现访问、修改Uri对应的ContentProvider中的数据?
从ContentResolver、ContentProvider和Uri的关系来看,Uri是ContentResolver和ContentProvider进行数据交换的标识。
ContentResolver对指定Uri执行CRUD等数据操作,但Uri并不是真正的数据中心,因此这些CRUD操作会委托给该Uri对应的ContentProvider来实现。举个例子:假如
B应用
通过ContentResolver执行CUUD操作,这些CRUD操作都需要指定Uri参数,Android系统就根据该Uri找到对应的ContentProvider(该ContentProvider属于
A应用
),ContentProvider复杂实现CRUD方法,完成对底层数据的增、删、改、查等操作,即实现了
B应用访问A应用数据
的目的。
2.API
ContentProvider