记得对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进行直接操作,可以方便的处理很多复杂的情况.
安卓四大组件都要在里注册.这里需要注意一下的是,
需要加入android:authorities属性,authorities是在内容URI中使用的字符串。
重写其中的方法(增删改查). 此时还要写一个继承于SQLiteOpenHelper的类,两者结合,对数据进行增删改查.
我觉得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就是帮助我们找到我们需要的”资源”,就像我们想找一个人或想做一件事的时候一样.