Android面试-4 ContentProvider

简介

共享型组件,用于其他组件乃至其他应用共享数据,内部需要实现CRUD操作,并且维持了一套数据集合,主要CRUD要处理好对线程同步,因为这些方法是在Binder线程池中被调用的

原理

底层采用Binder机制,


ContentProvider

以表格形式组织数据,具有crud四个方法让外部应用操作其中的数据,Android为常见的数据(如通讯录、日程表等)提供了内置了默认的ContentProvider 但也可根据需求自定义ContentProvider,但下面6个方法必须重写

<-- 4个核心方法 -->
  public Uri insert(Uri uri, ContentValues values) 
  // 外部进程向 ContentProvider 中添加数据

  public int delete(Uri uri, String selection, String[] selectionArgs) 
  // 外部进程 删除 ContentProvider 中的数据

  public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
  // 外部进程更新 ContentProvider 中的数据

  public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,  String sortOrder)  
  // 外部应用 获取 ContentProvider 中的数据

// 注:
  // 1. 上述4个方法由外部进程回调,并运行在ContentProvider进程的Binder线程池中(不是主线程)
 // 2. 存在多线程并发访问,需要实现线程同步
   // a. 若ContentProvider的数据存储方式是使用SQLite & 一个,则不需要,因为SQLite内部实现好了线程同步,若是多个SQLite则需要,因为SQL对象之间无法进行线程同步
  // b. 若ContentProvider的数据存储方式是内存,则需要自己实现线程同步

<-- 2个其他方法 -->
public boolean onCreate() 
// ContentProvider创建后 或 打开系统后其它进程第一次访问该ContentProvider时 由系统进行调用
// 注:运行在ContentProvider进程的主线程,故不能做耗时操作

public String getType(Uri uri)
// 得到数据类型,即返回当前 Url 所代表数据的MIME类型

ContentResolver

ContentProvider类并不会直接与外部进程交互,而是通过ContentResolver 类,该类通过URI 即可操作不同的ContentProvider 中的数据,外部进程通过 ContentResolver类从而与ContentProvider类进行交互,ContentResolver类有对所有的ContentProvider进行统一管理的作用。

// 外部进程向 ContentProvider 中添加数据
public Uri insert(Uri uri, ContentValues values)  

// 外部进程 删除 ContentProvider 中的数据
public int delete(Uri uri, String selection, String[] selectionArgs)

// 外部进程更新 ContentProvider 中的数据
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)  

// 外部应用 获取 ContentProvider 中的数据
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

优点

  • 安全:允许开发部分数据
  • 高效解耦:ContentProvider类并不会直接与外部进程交互,而是通过ContentResolver 类解耦了 底层数据的存储方式,使得无论底层数据存储采用何种方式,外界对数据的访问方式都是统一的

参考

Android:关于ContentProvider的知识都在这里了!

阅读更多
个人分类: Android面试
所属专栏: Android面试
上一篇Android面试-3 Service
下一篇Android面试-5 Android消息机制
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭