ContentProvider的理解和使用

前言

记得对ContentProvider的第一次印象是在刚学安卓的时候,当时看的是第一行代码这本书,特别适合入门,计算机专业的学生从头到尾看一遍,基本就可以开始写个简单的小程序了.这大概是做安卓的第一步.
然后呢,下一步,很多情况下,对着资料,就知道怎么用一些控件了,但要保持自己长久的竞争力,不但要知道怎么用,还要知道为什么这么用,自勉.

ContentProvider的理解和使用

在Android安全模型中,一个应用程序编写的文件无法被其他任何应用程序所读写。每个程序都有自己的Linux用户ID和数据目录(data/data/包名),以及其受保护的内存空间。Android程序可通过下面两种方式进行彼此间的通信。

1.IPC(Inter-Process Communication,进程间通信):一个进程使用AIDL(接口定义语言)和Ibinder接口声明一个任意的API。调用该API时,将在进程间安全且有效地对参数进行编组,这项先进技术用于对后台Service线程进行远程过程调用。

2.ContentProvider:ContentProvider 为安卓四大组件之一,进程中系统中将它们本身注册为某些数据类型的提供者。请求信息时,Android就会通过一个固定的API调用这些进程,以它们认为合适的方式查询或修改内容。
关于它的使用,网上的资料随处可以,我这里主要整理一下自己对其的理解,加深一下印象.

数据形式:

无论数据的来源是什么,ContentProvider都会认为是一种表,然后把数据组织成表格.

设计目的:

为存储和获取数据提供统一的接口。可以在不同的应用程序之间共享数据.

使用方式:

我们使用ContentProvider时,常常将其与SQLiteOpenHelper结合起来.
PS:如果我们需要使用多表查询或者大数据的事物处理,则需要SQLiteDatabase进行直接操作,可以方便的处理很多复杂的情况.

编码步骤:

第一步:manifest.xml中注册.

安卓四大组件都要在里注册.这里需要注意一下的是,
需要加入android:authorities属性,authorities是在内容URI中使用的字符串。

第二步:根据需求定义一个类,继承ContentProvider.

重写其中的方法(增删改查). 此时还要写一个继承于SQLiteOpenHelper的类,两者结合,对数据进行增删改查.

第三步,当然是在APP中,用ContentResolver等相关API获取或操作相关数据了.

核心思想

我觉得ContentProvider的整个机制的思想精髓就在于 uri类.uri是统一资源标示符.举个例子:
content://media/internal/images 这个URI将返回设备上存储的所有图片
content://contacts/people/ 这个URI将返回设备上的所有联系人信息
content://contacts/people/2 这个URI返回单个结果(联系人信息中ID为2的联系人记录)
注意理解这个ID的概念,JAVA理念是 一切都可以是对象,这个ID可以唯一的标示这个对象.对对象的操作,也可以寄托在这个ID之上.
具体模块细节不表, uri看看是不是很熟悉,像不像浏览器中地址栏上的那个url,
其实URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。而URI是一种语义上的抽象概念.

其实,uri的这种设计,不是指安卓范围内的,是指互联网上的所有资源标示符.非常契合真实世界.我们上网或沟通或娱乐,本质上都是对资源的获取或者操作或者传递,那么第一步,就是找到资源,而uri就是帮助我们找到我们需要的”资源”,就像我们想找一个人或想做一件事的时候一样.

你可能感兴趣的:(Android)