Android 这 13 道 ContentProvider 面试题,你都会了吗?
前言
- 作为
Android
的四大组件之一,ContentProvider
可以说是无处不在了。 - 但是对于我而言,开发过程中看似
ContentProvider
用得很娴熟,却一直没能形成一个完整的体系。 - 也许大家也有着和我类似的烦恼,于是我特地花了几天的时间,总结了我所知道的知识点,以及面试中可能遇到的问题。将本文分享给大家,希望能帮助大家重新梳理下我们的这个老朋友
ContentProvider
。
最后,希望大家阅读愉快!
文章目录
ContentProvider
应用程序间非常通用的共享数据的一种方式,也是Android
官方推荐的方式。Android
中许多系统应用都使用该方式实现数据共享,比如通讯录、短信等。
方便大家学习,我在 GitHub 上建立个 仓库
-
仓库内容与博客同步更新。由于我在
稀土掘金
简书
CSDN
博客园
等站点,都有新内容发布。所以大家可以直接关注该仓库,以免错过精彩内容!
1.1 Android 为什么要设计 ContentProvider 这个组件?
- 很多做
Android
开发的人都不怎么使用它,觉得直接读取数据库会更简单方便。 - 那么
Android
搞一个内容提供者在数据和应用之间,只是为了装高大上,故弄玄虚?其设计用意在于:
- 封装。对数据进行封装,提供统一的接口,使用者完全不必关心这些数据是在
DB
,XML
、Preferences
或者网络请求来的。当项目需求要改变数据来源时,使用我们的地方完全不需要修改。 - 提供一种跨进程数据共享的方式。
- 应用程序间的数据共享还有另外的一个重要话题,就是数据更新通知机制了。因为数据是在多个应用程序中共享的,当其中一个应用程序改变了这些共享数据的时候,它有责任通知其它应用程序,让它们知道共享数据被修改了,这样它们就可以作相应的处理。
1.2 如何访问自定义 ContentProvider
ContentResolver
接口的notifyChange
函数来通知那些注册了监控特定 URI的ContentObserver 对象,使得它们可以相应地执行一些处理。- ContentObserver 可以通过 registerContentObserver 进行注册。
- 通过
ContentProvider
的