您的位置:首页 > 其它

广播接受者 时间很短,不要用耗时的,不要超过16s。 这个运行在主线程。

2017-08-03 11:28 267 查看
什么是 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执行完后,它声明的对象会被回收掉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐