什么是 content provider?
四大组件之一。需要 在xml文件定义
如 <providerandroid:name=”” andoid:authorities =”” android:exported=””>
Authorities 权力的意思。 一定要记住单词意思。
Exported 出口 输入的意思。 一定要记住这个单词的意思。
这里android:exported 是声明这个提供者 是不是允许其他人来访问使用(输出)。如果是true代表允许其他人来使用这个提供者。
是否允许其他的应用程序访问我当前这个应用程序的数据
内容提供者是 提供操作数据的接口, 不能存储数据。
它可以跨进程访问。就是 其他应用可以访问这个数据。共享自己的数据给其他应用访问。
Android 手机 默认的有通讯录,图片,音视频 等,这些都是内容提供者。
内容提供者的数据修改更新 会被监听。 就是内容观察者 contentObserver.
思考 :为什么内容提供可以跨进程访问?
如何实现数据访问?需要用到 内容解析器 contentResolver .
记住这单词 resolver 解析器,求解器。
Context.getContentResolver();
他的原理,源码怎么实现的
用source insight 打开源码
查找 contentResolver 打开这个类这个文件 contentResoler.java
contentResolver :
提供四个与contentProvider相一致的方法。比如insert方法。发现它是通过传入的uri,还有通过 IContentProvider的insert方法实现的
ContentProvider 有个内部类是 Transport implements IcontentProvider
Uri:是统一资源标识符。 主要用于标识网络图片网址。
Uri结构 是协议://用户名:密码@主机名:端口号/路径/文件?参数1=值1&参数2=值2
在内容提供者这里 它规范的uri对应是 协议:conrtent://
域名:android:authorities
路径:/contacts
其他的三大组件是通过Intent
这个组件通过 的是uri
需要练习, 通过source insight软件 来查看源码
手机自身数据的访问
可以用文件浏览器看到 在 data/data/ 这个目录下面,里面有好多文件夹com.android.providers. 开头的文件夹。 这些都是手机自身的内容提供者数据。
有应用 applications 有月历calendar 有联系人contacts有下载downloads有下载uidownloads.ui 有 drm 不知道是什么。 有媒体media,有设置settings 有手机电话telephony
有用户词典 userdictionary。这些。
通讯录contactsContract.Contacts.CONTENT_URI 管理联系人的Uri
手机内部存储器上的图片MediaStore.Audio.Images.INTERNAL_CONTENT_URI
手机内存上的音频MediaStore.Audio.Media.INTERNAL_CONTENT_URI
Sd卡上的视频MediaStore.Audio.Video.EXTERNAL _CONTENT_URI
INTERNAL 就是内部的意思。Internal 记住这个单词。
External 外部的。
Contact的意思 是联系的意思。
常量的单词 是 constant
Contract 的意思 是合同。
数据更新原理 ,内容解析器contenResolver注册内容观察者contentObserver实际是 通过ContentService注册观察者。
ContentService里面有个方法是 notifyChange(Uri) {
Observer.onchange();//这个就是我们构造的观察者对象,调用它的这个方法
}
内容观察者里面有个方法是 onchange()方法。这个方法,就是数据改变的时候
内容观察者的构造方法 用到了handler 通过这个处理UI。
简历里面要有亮点。别人不知道的。
广播的作用域 就是全局。
生命周期是 就是一个函数的生命周期。
静态注册,xml文件注册。程序安装就已经有广播接受者了。
动态注册。代码注册。 程序必须运行到注册代码才有。
广播接受者 时间很短,不要用耗时的,不要超过16s。 这个运行在主线程。
OnReceive() 这个函数就是广播的生命周期。OnReceive执行完后,它声明的对象会被回收掉。