课程目标:
理解ContentProvider的作用及好处
认清ContentProvider与数据存储的关系
掌握ContentProvider对外提供的数据模型形式
能够编写ContentResolver的增删改查
能够自定义一个ContentProvider ,能够提供进程间访问
了解ContentProvider 内部机制
重点难点:
ContentProvider与数据操作的关系
ContentProvider内部机制
考核目标:
说说ContentProvider与Android数据存储的关系?
ContentProvider对象何时被实例化?
ContentProvider数据模型画出来
ContentProvider的机制是什么?
一、为什么要有ContentProvider?
1)我们之前的存储都是放在具体应用程序下面(具体的私有路径,限制访问权限),如何能够共享呢?
2)系统由于安全的因素,提供的一些数据访问,不能直接开放给开发者,如何让开发者能够访问到这些数据呢?
3)如果我写好的数据库程序,希望封装并且提供一套公共标准,让外部调用而不直接操作我的数据库,如何做呢?
二、特性
唯一的共享程序间数据方式。
android没有提供公共数据区让不同的程序去共享访问。
三、ContentProvider是什么?
1)ContentProvider是一套存储访问数据的通道,让你无需了解下面的存储细节实现数据操作及共享。
2)无论具体存储是如何的,存在哪儿的,但对外提供的模型是统一的。
ContentProvider 实际上是个管道,把表提供出来。
3)定义了ContentProvider对象,会在系统初始化的时候自动实例化,无需我们手动去实例化对象。
4)我们只需要通过ContentResolver去取的和操作数据即可。
四、ContentResolver与ContentProvider配对
五、URI
六、系统提供的ContentProvider
Browser :浏览器的书签 ,历史记录等。
CallLog :呼叫记录。包括呼入呼。
ContactsContract :通讯录相关信息。
Calendar :日历相关信息。
MediaStore :媒体存储。
Settings :系统设置信息的部分内容。
UserDictionary :用户词典内容。
七、增删改查
八、查询系统通讯录
九、创建自己的ContentProvider
十、猜猜ContentProvider机制是什么样的 ?
十一、FAQ:ContentProvider调用的时候宿主进程生命周期
接受调用的时候启动宿主进程 , 操作完毕后,宿主进程为empty