ContentProvider是Android的四大组建之一.

基本介绍:
ContentProvider 组建主要用于 Android 系统中不同应用程序间的数据交换. 应用程序 A 通过 ContentProvider 暴露内部的数据, 应用程序 B 通过 ContentResolver 和 A 提供的 Uri 来操作(增, 删 改, 查) A 的数据.

重点内容:

当一个应用程序通过ContentProvider暴露自己的数据操作接口时, 不管该应用程序是否启动, 其他应用程序都可以通过该接口操作应用程序内部的数据.

开发ContentProvider的步骤:
1.定义自己的ContentProvider类,该类需要继承Android提供的ContentProvider基类.
需要实现的接口如下:

public boolean onCreate():该方法在ContentProvider创建后会被调用,当其他应用程序第一次访问ContentProvider,该ContentProvider会被创建出来,并立即回调该onCreate()方法.

public Uri insert(Uri uri, ContentValues values):根据该Uri插入values对应的数据.

public int delete(Uri uri, String selection, String[] selectionArgs):根据Uri删除select条件所匹配的全部数据.

public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs):根据Uri修改select条件所匹配的全部记录.

public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder):根据Uri查询出select条件所匹配的全部记录,其中projection就是一个列名列表,表明只选择出指定的数据列.

public String getType(Uri uri):该方法用于返回当前Uri所代表的数据的MIME类型.如果该Uri对应数据可能包括多条记录,那么MIME类型字符串应该以vnd.android.cursor.dir/开头;如果该Uri对应的数据只包含一条记录,那么返回MIME类型字符串应该以vnd.android.cursor.item/开头.

2.向Android系统注册这个ContentProvider,也就是在AndroidManifest.xml文件中注册这个ContentProvider,就和注册Activity一样,注册ContentProvider时需要为它绑定一个Uri;

注:向Android中注册ContentProvider,只需在AndroidManifest.xml配置文件中

name属性指定为ContentProvider类,         authorities就相当于为该ContentProvider指定域名,exported设置为true就是允许其他应用访问该应用内部  - ->  "com.example.contentproviderdemo.ContentProviderDemo"    android:name=".ContentProviderDemo"    android:multiprocess="false"    android:exported="true"            >

配置文件解析:
android:exported=”true” //该组件允许被另一个Application启动

android:multiprocess=”false” //该属性通常与android:process=”“一起使用
我们知道默认不指定android:process的话,provider组件所在的进程名就是包名,multiprocess默认为false,则provider会随着应用启动的时候加载。如果对provider指定android:process和android:multiprocess,那么会产生如下几种情况:

内容 android:process=”:force” android:process=”” 不定义
android:multiprocess=”false” provider不会随应用进程的启动而加载,当调用到provider时才会加载, 加载时provider是在”fore”进程中初始化的 provider会随着应用启动的时候加载,加载时provider是在应用默认主进程中初始化的.对于multiprocess为false(默认值),由系统把定义该ContentProvider的APP启动起来(一个独立的Process)并实例化ContentProvider, 这种ContentProvider只有一个实例, 运行在自己的App的Process中. 所以调用者共享该ContentProvider实例, 调用者与ContentProvider实例位于两个不同的Process中.
android:multiprocess=”true” provider不会随应用进程的启动而加载,当调用到provider时才会加载, 加载时provider是在调用者的进程中初始化的 provider会随着应用启动的时候加载,加载时provider是在应用默认主进程中初始化的.对于multiprocess为true, 意味着provider可以多实例, 那么由调用者在自己的进程空间实例化一个ContentProvider对象, 此时定义ContentProvider的App可能并没有启动.

URI的解析:

我们先来给出一个简单的URL:http://www.xiyou.edu.cn/test.PHP

分解开来看:

http://:URL的协议部分;只要通过HTTP协议访问网站,这个部分是固定的.

www.xiyou.edu.cn:域名部分.只要访问指定的网站,这个部分总是固定的.

test.php:网站资源部分.当访问者需要访问不同资源时,这个部分根据资源的不同而改变.

ContentProvider要求的Uri与此类似,例如如下Uri:content://com.xiyou.provider.mprovider/test

分解开来看:

content://:此部分是Android的ContentProvider规定的,就想网上的协议默认是http://一样.暴露ContentProvider,访问ContentProvider的协议默认是content://.

com.xiyou.provider.mprovider:这个部分是就是ContentProvider的authority.系统就是由这个部分来找到操作哪个ContentProvider只要访问指定的ContentProvider,这个部分总是固定的.

test:资源部分,当访问者需要访问不同的资源时,这个部分是动态改变的 .

综上: ContentProvider开发时需要注意的点都在此了, 具体的demo后续会提交到github上.

参考

Android四大组件之ConentProvider.
Android ContentProvider 多进程multiprocess 详解

更多相关文章

  1. Android应用程序键盘(Keyboard)消息处理机制分析
  2. Android自动化测试工具——Monkey
  3. Android(安卓)在安装完成界面,点击打开应用程序。在应用程序点击h
  4. android cmd adb命令安装和删除apk应用
  5. Android(安卓)Framework解析
  6. android 下载网络pdf文件后并显示
  7. Android(安卓)基础
  8. Android的webview研究
  9. android开发(二):android结构

随机推荐

  1. android webrtc构建过程
  2. 谁说Android的动画不廉价(三)之共享元素动
  3. 浅谈Android中的线程的通信及Handle机制
  4. Android String Placeholders
  5. Android退出程序(三)——Android事件总线
  6. usb 配置
  7. Android 系統存在設計漏洞,釣魚網站隨時出
  8. ListView 取消点击效果
  9. 【Android的从零单排开发日记】之入门篇(
  10. android 基础知识整理 1