【从零到一】Android四大组件(三) | ContentProvider(内容提供器)

本文详细介绍了Android四大组件中的ContentProvider,包括它的作用、实现原理和基本用法。ContentProvider作为数据共享的桥梁,允许不同应用间交互数据。文章探讨了URI的构成及其在数据操作中的角色,同时讲解了ContentProvider类、ContentResolver类以及UriMatcher、ContentUris和ContentObserver等辅助类的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1. 内容提供器是什么

  内容提供器(即ContentProvider)是Android四大组件之一,属于共享型组件,用于同其他组件甚至其他应用程序进行数据共享。我们不仅可以通过现有的ContentProvider来获取其应用程序中的数据,也可以自定义自己的ContentProvider并为它创建一个供外部访问的接口用来提供数据。ContentProvider需要在AndroidManifest.xml中注册,但不需要通过Intent启动。


2. 内容提供器的实现原理

  ContentProvider的实现原理:Android中的Binder机制。这里放上Carson_Ho大神的文章,推荐阅读:图文详解 Android Binder跨进程通信的原理。涉及到Linux基础知识,包括进程划分跨进程通讯(IPC)和内存映射等,希望以后能写篇文章总结。


3. 内容提供器的基本用法

  知道了ContentProvider的实现原理了,接下来当然是怎么运用ContentProvider了。我们知道ContentProvider用于数据共享,那么数据共享的步骤是怎样的呢?没错,首先就是要打包需要共享的数据,这时候就要用到URI

 3.1 URI

  URIUniform Resource Identifier),即统一资源标识符。用于唯一标识ContentProvider和其中的数据。下面介绍一下URI的组成:
在这里插入图片描述

  • 主题(Schema):Android中 ContentProviderURI前缀
  • 权限(Authority): ContentProvider唯一标识符(一般为 包名
  • 路径(Path): ContentProvider 指向数据库中的一个 (一般为 表名
  • 记录(ID): 中的一条 记录(省略时表示返回所有记录)

  现在我们能用URI字符串清楚地表示需要打包的数据了,接下来就是通过Uri.parse()方法将URI字符串解析成Uri对象

		Uri uri = Uri.parse("content://com.macardo.contentprovider.provider/User");

  打包好数据之后就可以对数据进行增删查改了,下面介绍ContentProvider用到的几个常用类。

   ContentProviderContentResolver 为两个主要类:

主要类 作用
ContentProvider 定义增删改查方法
ContentResolver 统一管理不同ContentProvider间的操作

  UriMatcherContentUrisContentObserver 是为了辅助 ContentProvider 的工具类:

工具类 作用
UriMatcher ContentProvider中注册URI
ContentUris 操作 URI
ContentObserver 观察 URI引起 ContentProvider中的数据变化并通知外界

 3.1 ContentProvider类

  ContentProvider类用于定义增删改查方法。

  创建自定义ContentProvider时,需要重写以下6个方法:

    // 以下方法均运行在ContentProvider进程的主线程,故不能做耗时操作
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值