Content Provider详解(太懒不想抄)
1.Content Provider作用
进程间进行数据交互&共享,即跨进程通信

2.Content Provider原理
content provider底层是采用Android中Binder机制。
2.1统一资源标识符(URI)
- 作用:唯一标识content provider&其中的数据
外界进程通过URI找到对应的content provider&其中的数据,再进行数据操作
具体使用(自定义)
自定义URI
//设置uri
Uri parse = Uri.parse("content://com.carson.provider/User/1");
//指向的资源为:名为'com.carson.provider'
//的contentProvider中表名为‘User'中的'id'为1的数据
2.2MIME数据类型
- 指定某个拓展名的文件用某种应用程序来打开。如指定 .html文件采用text应用程序打开,指定.pdf文件采用flash应用程序打开。
ContentProvider.getType(uri);//根据uri,返回MIME类型。
2.ContentProvider类
- 2.1Contentprovider主要以表格的形式组织数据
同时也支持文件数据,只是表格的数据比较多。 - 主要方法,进程间共享数据的本质是:添加、删除、获取和修改数据。
<-- 4个核心方法 -->
public Uri insert(Uri uri, ContentValues values)
// 外部进程向 ContentProvider 中添加数据
public int delete(Uri uri, String selection, String[] selectio
nArgs)
// 外部进程 删除 ContentProvider 中的数据
public int update(Uri uri, ContentValues values, String select
ion, String[] selectionArgs)
// 外部进程更新 ContentProvider 中的数据
public Cursor query(Uri uri, String[] projection, String selec
tion, String[] selectionArgs, String sortOrder)
// 外部应用 获取 ContentProvider 中的数据
// 注:
// 1. 上述4个方法由外部进程回调, 并运行在ContentProvider进程的Binder
线程池中( 不是主线程)
// 2. 存在多线程并发访问, 需要实现线程同步
// a. 若ContentProvider的数据存储方式是使用SQLite & 一个, 则不需要, 因为SQLite内部实现好了线程同步,
// 若是多个SQLite则需要, 因为SQL对象之间无法进行线程同步
// b. 若ContentProvider的数据存储方式是内存, 则需要自己实现线程同步
<-- 2个其他方法 -->
public boolean onCreate()
// ContentProvider创建后 或 打开系统后其它进程第一次访问该ContentProvi
der时 由系统进行调用
// 注: 运行在ContentProvider进程的主线程, 故不能做耗时操作
public String getType(Uri uri)
// 得到数据类型, 即返回当前 Url 所代表数据的MIME类型
3.ContentObserver 类
内容观察者,观察Uri引起contentprovider中的数据变化并通知外界。
具体使用:
// 步骤1: 注册内容观察者ContentObserver
getContentResolver().registerContentObserver(uri);
// 通过ContentResolver类进行注册, 并指定需要观察的URI
// 步骤2: 当该URI的ContentProvider数据发生变化时,
// 通知外界( 即访问该ContentProvider数据的访问者)
public class UserContentProvider extends ContentProvider {
public Uri insert(Uri uri, ContentValues values) {
db.insert("user", "userid", values);
getContext().getContentResolver().notifyChange(uri, null);
// 通知访问者
}
}
// 步骤3: 解除观察者
getContentResolver().unregisterContentObserver( uri) ;
// 同样需要通过ContentResolver类进行解除
作者:木小伍
链接:https://www.jianshu.com/p/4b9b61f99069
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Content Provider详解(太懒不想抄)的更多相关文章
- Content Provider 详解
几个概念:Cursor. Content provider . Uri .contentresolver 1. Cursor : 个人理解为数据库中的一行数据,它是每行数据的集合.它是一个类.通过它 ...
- Content Providers详解
今天仔细阅读了一遍Content Providers的官方API文档,总结了一下Android中Content Providers的用法. 各种类型的Content Provider对一个结构化的数据 ...
- android 四大组件详解
这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity详解二.Service详解三.Broadcast Receiver详解四.Content Provider详解外加一个重 ...
- Android基础夯实--重温动画(四)之属性动画 ValueAnimator详解
宝剑锋从磨砺出,梅花香自苦寒来:千淘万漉虽辛苦,吹尽狂沙始到金: 长风破浪会有时,直挂云帆济沧海 一.摘要 Animator类作为属性动画的基类,它是一个抽象类,它提供了实现动画的基本架构,但是我们不 ...
- AndroidMainfest详解
基于TV settings和SettingsProvider Android启动模式对activity行为的影响 AndroidManifest.xml文件详解 Manifest文件中,applica ...
- JavaScript 各种遍历方式详解及总结
JavaScript 各种遍历方式详解 在$.each中想要终止循环,但是它没有continue或者break这样的终止方式,所以尝试使用return来进行终止,但是发现并没有跳出循环.为了搞清楚js ...
- dsu on tree (树上启发式合并) 详解
一直都没出过算法详解,昨天心血来潮想写一篇,于是 dsu on tree 它来了 1.前置技能 1.链式前向星(vector 建图) 2.dfs 建树 3.剖分轻重链,轻重儿子 重儿子 一个结点的所有 ...
- 入职小白随笔之Android四大组件——内容提供器详解(Content Provider)
Content Provider 内容提供器简介 内容提供器(Content Provider)主要用于在不同的应用程序之间 实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的 ...
- content = "IE=edge,chrome=1" 详解
content = "IE=edge,chrome=1" 详解 < meta http-equiv = "X-UA-Compatible" content ...
- TCP/IP详解学习笔记 这位仁兄写得太好了
TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣 ...
随机推荐
- mybatis学习日记3
1.mybatis的延迟加载 问题:在一对多中,当我们有一个用户,他有100个账户 在查询用户的时候,要不要把关联的账户查出来? 在查询账户的时候,要不要把关联的用户查出来? 解决:在查询用户的时候, ...
- P3_注册小程序账号&安装开发者工具
注册小程序账号 点击注册按钮 使用浏览器打开 https://mp.weixin.qq.com/ 网址,点击右上角的"立即注册"即可进入到小程序开发账号的注册流程,主要流程截图如下 ...
- AEDR8300:光电编码程序构思
一.实验 1.光电反射理论是经过码盘的window时,电压变低,经过bar时,电压为高,这样可以通过检测到的脉冲数,来进行速度的获取.但是实际并不是这样, 反馈回来的信号是周期性的,经过试验发现,可以 ...
- JavaScript的闭包和作用域
作用域相关 作用域的概念: 作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性.换句话说,作用域决定了代码区块中变量和其他资源的可见性: 作用域的类型: 全局作用域: 最外层函数和在最外 ...
- CentOS7加入AD域(winbind)
作者:独笔孤行 官网: http://anyamaze.com 公众号:云实战 前言 AD域(Active Directory)是Windows服务器的活动目录,在目录中可以收录公司的电脑账 ...
- RabbitMQ基础和解疑
一.基础概念 1. Producer:生产者,就是投递消息的一方 消息一般可以包含2个部分:消息体和标签(Label).消息体也可以称之为payload,在实际应用中,消息体一般是一个带有业务逻辑结构 ...
- vue element-ui table 实现自动滚动效果
<el-table :data="tableData" stripe class="swiper-page-table" ref="table& ...
- IDEA 上传项目到 Gitee 小记
此方式可直接将 IDEA 中项目上传到 Gitee 仓库,无需打开 Gitee 手动创建空仓库. 前提环境 安装好 Git,并在 IDEA 中成功配置: 注册有 Gitee 账号,并记得账号密码: I ...
- Java/.Net双平台核心,Jvm和CLR运行异同点
前言: 本篇以.Net 7.0.2 CLR 和 OpenJDk19参照,解析下它们各自调用函数的异同. 以下为个人理解. 概述 JDK大约5.9G,CLR大约7.6G,两者相差1.7G左右. root ...
- [GKCTF2021]random
[GKCTF2021]random 本题出现了MT19937伪随机数生成算法. 目录 [GKCTF2021]random 题目 分析 MT19937算法 步骤 代码实现 解法1 解法2 总结 题目 t ...
