Android ContentProvider 13 道面试题,你都能熟练解答吗?

摘要:前言 作为 的四大组件之一, 可以说是无处不在了。 但是对于我而言,开发过程中看似 用得很娴熟,却一直没能形成一个完整的体系。 也许大家也有着和我类似的烦恼,于是我特地花了几天的时间,总结了我所知道的知识点,以及面试中可能遇到的问题。将本文
前言 作为 Android 的四大组件之一,ContentProvider 可以说是无处不在了。 但是对于我而言,开发过程中看似 ContentProvider 用得很娴熟,却一直没能形成一个完整的体系。 也许大家也有着和我类似的烦恼,于是我特地花了几天的时间,总结了我所知道的知识点,以及面试中可能遇到的问题。将本文分享给大家,希望能帮助大家重新梳理下我们的这个老朋友 ContentProvider 。 最后,希望大家阅读愉快! 文章目录 ContentProvider 应用程序间非常通用的共享数据的一种方式,也是 Android 官方推荐的方式。 Android 中许多系统应用都使用该方式实现数据共享,比如通讯录、短信等。 方便大家学习,我在 GitHub 上建立个 仓库 仓库内容与博客同步更新。由于我在 稀土掘金 简书 CSDN 博客园 等站点,都有新内容发布。所以大家可以直接关注该仓库,以免错过精彩内容! 仓库地址: 超级干货!精心归纳 Android 、JVM 、算法等,各位帅气的老铁支持一下!给个 Star ! 1.1 Android 为什么要设计 ContentProvider 这个组件? 很多做 Android 开发的人都不怎么使用它,觉得直接读取数据库会更简单方便。 那么 Android 搞一个内容提供者在数据和应用之间,只是为了装高大上,故弄玄虚?其设计用意在于: 封装。对数据进行封装,提供统一的接口,使用者完全不必关心这些数据是在 DB ,XML 、Preferences 或者网络请求来的。当项目需求要改变数据来源时,使用我们的地方完全不需要修改。 提供一种跨进程数据共享的方式。 应用程序间的数据共享还有另外的一个重要话题,就是数据更新通知机制了。因为数据是在多个应用程序中共享的,当其中一个应用程序改变了这些共享数据的时候,它有责任通知其它应用程序,让它们知道共享数据被修改了,这样它们就可以作相应的处理。 1.2 如何访问自定义 ContentProvider ContentResolver 接口的 notifyChange 函数来通知那些注册了监控特定 URI的ContentObserver 对象,使得它们可以相应地执行一些处理。 ContentObserver 可以通过 registerContentObserver 进行注册。 通过 ContentProvider 的 Uri 访问开放的数据。 ContenResolver 对象通过 Context 提供的方法 getContenResolver() 来获得。 ContenResolver 提供了以下方法来操作:insert delete update query 这些方法分别会调用 ContenProvider 中与之对应的方法并得到返回的结果。 1.3 通过 ContentResolver 获取 ContentProvider 内容的基本步骤 得到 ContentResolver 类对象:ContentResolver cr = getContentResolver ( )。 定义要查询的字段 String 数组。 使用 cr.query() ; 返回一个 Cursor 对象。 使用 while 循环得到 Cursor 里面的内容。 1.4 ContentProvider 是如何实现数据共享的: 在 Android 中如果想将自己应用的数据 ( 一般多为数据库中的数据 ) 提供给第三发应用, 那么我们只能通过 ContentProvider 来实现了。 ContentProvider 是应用程序之间共享数据的接口。 使用的时候首先自定义 一个类继承 ContentProvider , 然后覆写 query 、insert 、update 、delete 等 方法。 因为其是四大组件之一因此必须在 AndroidManifest 文件中进行注册。 把自己的数据通过 uri 的形式共享出去 android 系统下 不同程序 数据默认是不能共享访问 需要去实现一个类去继承 ContentProvider。
阅读全文