安卓面经_安卓基础面全解析(4/30)内容提供者全解析
牛客高级系列专栏:
安卓(安卓系统开发也要掌握)
- 想通关安卓面试,请看(承诺免费售后答疑):《150道安卓高频面试题目录及答案链接》
- 想通关安卓系统面试,请看:《140道安卓系统Framework面试题目录及答案链接》
- 想进阶安卓开发,请看(承诺免费售后答疑):《Android进阶知识体系解析_15大安卓进阶必备知识点》
- 想了解安卓APP完整开发流程,请看(承诺免费售后答疑):《安卓APP完整开发流程》
- 想掌握安卓App性能优化,请看(承诺免费售后答疑):《安卓性能优化讲解和实战专栏》
- 想掌握Gradle语法和配置,制作Gradle插件,请看(承诺免费售后答疑):《安卓Gradle语法解析和实践大全》
嵌入式
- 想通关嵌入式面试,请看: 《111道嵌入式面试题目录及答案链接》
- 想多掌握几个嵌入式项目,请看:《6个嵌入式项目交流分享(附源码)》
本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业安卓开发经验,该专栏整理本人对常见安卓高频开发面试题的理解;
网上安卓资料千千万,笔者将继续维护专栏,一杯奶茶价格不止提供答案解析,承诺提供专栏内容免费技术答疑,直接咨询即可。助您提高安卓面试准备效率,为您面试保驾护航!
正文开始⬇
ContentProvider(内容提供者)是最后一个Android四大组件,相对其他3个,面试中问的最少。但以下问题也需要搞懂:
- 什么是内容提供者?⭐⭐⭐⭐⭐
- 简单介绍下 ContentProvider 是如何实现数据共享的(原理)?⭐⭐⭐⭐
- 说说 ContentProvider、ContentResolver、ContentObserver 之间的关系?⭐⭐⭐⭐
- 说说如何创建自己应用的内容提供者的使用场景。⭐⭐⭐
- 说说ContentProvider的权限管理。⭐⭐⭐
- 为什么要使用通过ContentResolver类从而与ContentProvider类进行交互,而不直接访问ContentProvider类?⭐⭐⭐
- ContentProvider的底层是采用Android中的Binder机制,既然已经有了binder实现了进程间通信了为什么还会需要contentProvider?⭐⭐⭐⭐
看完以下的解析,一定可以让面试官眼前一亮。
目录
- 1、什么是内容提供者
- 2、ContentProvider 使用方法
- 2.1 ContentResolver和url
- 2.2 使用ContentProvider在两个进程进行数据传递
- 3、ContentProvider的权限管理
- 4、说说ContentProvider、ContentResolver、ContentObserver 之间的关系?
- 5、ContentProvider 实现原理
- 5.1 ContentProvider的底层是采用Android中的Binder机制,既然已经有了binder实现了进程间通信了为什么还会需要contentProvider?
1、 什么是内容提供者
之前有说过可以用Intent在组件中传递数据,那么其数据的大小是否有限制呢?很明显是有限制的,Intent传递数据大小的限制大概在1M左右,超过这个限制就会静默崩溃。因此我们就可以通过ContentProvider进行进程间的数据传递,也就是ContentProvider是一种进程间的数据传递的方式。 一般来说,Android数据存储的方式有:文件,数据库,网络,SharePreferences,ContentProvider。 上图是网上找到的一个图片,然而从图上可以明显的知道,ContentProvider更准确来说只是一个中间者的身份,真正存储数据的是数据库和文件等形式,这一点要分清楚!
2、ContentProvider 使用方法
2.1 ContentResolver和url
介绍ContentProvider的使用,就需要先了解ContentResolver和url。 url相信很多读者都知道是统一资源标识符。ContentProvider使用表的形式来组织数据,无论数据的来源是什么,ConentProvider 都会认为是一种表,然后把数据组织成表格。因此就需要一个url来定位需要操作的是哪个数据。下面是网上看到的自定义url的组成图,和大家分享下。
ContentResolver统一管理不同 ContentProvider间的操作。因为同一个进程可能有多个ContentProvider,如果每一个都需要单独去管理,那么花费的成本自然很好。因此希望有一个类,专门对多个ContentProvider做统一管理,ContentResolver就出现了。
2.2 使用ContentProvider在两个进程进行数据传递
面试中较少会问ContentProvider如何使用,反而会问实现的原理,在此为了让读者知道怎么用,进一步了解ContentProvider是什么,我简单描述下两个怎么通过ContentProvider进行数据传递,但不会涉及完整的代码实现。下面选用数据存储方式是数据库的形式,讲一下完整使用流程。
进程A:
- 创建数据库类:MyDBHelper,该类主要完成数据库创建和对应表格的创建;
public class DBHelper extends SQLiteOpenHelper {
...
@Override
public void onCreate(SQLiteDatabase db) {
// 创建两个表格:用户表和兴趣表
}
...
}
- 实现自定义MyProvider类,继承ContentProvider,并重写增删改查接口;
public class MyProvider extends ContentProvider {
@Override
public boolean o
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
#提供免费售后答疑!!花一杯奶茶的钱获得安卓面试答疑服务,稳赚不赔# Android发展已经很多年,安卓资料网上千千万,本专栏免费提供专栏内容技术答疑!!私聊当天必回。在阅读过程或者其他安卓学习过程有疑问,都非常欢迎私聊交流。