Android面试题(4)--ContentProvider

一、信息

整理:yoyiyi(soleil雪寂)

创建时间:2019 年 6 月 25 日

修改时间:2020 年 1 月 28 日

校对:yoyiyi(soleil雪寂)

状态:更新中

字数:903 字

仓库:Soleil-Notes

二、目录

三、正文

1、ContentProvider 使用方法

  1. 简述

    ContentProvider 的作用是实现跨进程通讯,实现进程之间的数据共享,不同的应用之间数据共享,提供统一的接口。

  2. 使用

    1. ContentProvider(内容提供者)通过 uri 来标识其它应用要访问的数据。
    2. 通过 ContentResolver(内容解析者)的增、删、改、查方法实现对共享数据的操作。
    3. 还可以通过注册 ContentObserver(内容观察者)来监听数据是否发生了变化来对应的刷新页面
  3. 原理

    1. Binder 进程间通信机制 + 匿名共享内存机制
    2. ContentProvider 是通过 IBinder 实现通信过程的
    3. getContentResolver 获得到的是 ApplicationContentResolver(在 ContextImpt 中实现的)
    4. Client 端 ApplicationContentResolver 使用 ContentProviderProxy 作为 IBinder 的Proxy(ContentProviderNative中实现)
    5. Provider 端通过 Transport 作为 IBinder 的实现端(ContentProvider 中实现)

2、说说 ContentProvider、ContentResolver、ContentObserver 之间的关系

  1. ContentProvider:管理数据,提供数据的增删改查操作,数据源可以是数据库、文件、XML、网络等,ContentProvider 为这些数据的访问提供了统一的接口,可以用来做进程间数据共享。
  2. ContentResolver:ContentResolver 可以不同 URI 操作不同的 ContentProvider 中的数据,外部进程可以通过 ContentResolver 与 ContentProvider 进行交互。
  3. ContentObserver:观察 ContentProvider 中的数据变化,并将变化通知给外界。

3、ContentProvider 的权限管理(读写分离,权限控制-精确到表级,URL 控制)

  1. 对于 ContentProvider 暴露出来的数据,应该是存储在自己应用内存中的数据,对于一些存储在外部存储器上的数据,并不能限制访问权限,使用 ContentProvider 就没有意义了。对于 ContentProvider 而言。

  2. 有很多权限控制,可以在 AndroidManifest.xml 文件中对节点的属性进行配置,一般使用如下一些属性设置:

    - android:grantUriPermssions:临时许可标志。
    - android:permission:Provider读写权限。
    - android:readPermission:Provider的读权限。
    - android:writePermission:Provider的写权限。
    - android:enabled:标记允许系统启动Provider。
    - android:exported:标记允许其他应用程序使用这个Provider。
    - android:multiProcess:标记允许系统启动Provider相同的进程中调用客户端。
    

4、ContentProvider 实现原理

Binder 进程间通信机制 + 匿名共享内存机制

5、如何使用 ContentProvider 进行批量操作

  1. 使用 ContentProviderOperation
  2. getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

参考阅读:

ContentProvider的批处理操作

6、请介绍下 ContentProvider 是如何实现数据共享的

  1. A 应用通过 ContentProvider 暴露自己的数据,B 应用通过 ContentResolver 来操作 ContentProvider 暴露的数据。

  2. A 应用以某种 Uri 的形式对外提供数据,B 应用使用 ContentResolver 根据 A 应用提供的Uri 获得 A 应用的 authority 属性去访问操作指定的数据。

发布了40 篇原创文章 · 获赞 15 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_44947117/article/details/104103092