【精华】Android面试精华总结——ContentProvider组件

一、ContentProvider

  ContentProvider用于不同的应用程序之间实现数据共享的功能,还能保证数据安全性,使用ContentProvider(内容提供器)是Android实现跨程序共享数据的标准方式。ContentProvider可以选择只对哪一部分数据进行共享,从而保证程序中的隐私数据不会有泄露的风险。
  ContentProvider是使用表的形式来组织数据的,无论数据来源是什么,ContentProvider都认为是一种表。每个ContentProvider都有一个公共的URI,用于表示这个ContentProvider所提供的数据。
  ContentProvider的用法一般有两种:以是使用现有的ContentProvider来读取和操作相应程序中的数据,另一种是创建自己的ContentProvider给程序的数据提供外部访问接口。
  使用ContentProvider处理大批量数据时,最好把操作放在一个事务中完成,这样可以保证操作的完整性。要么所有的数据都成功处理,若有一个数据出错,则之前所有的操作都做回滚处理。
  常用的方法有query、insert、update、delete、getType、onCreate等。

二、ContentResolver

  如果想要访问ContentProvider中共享的内容,就要借助ContentResolver类,通过Context中的getContentResolver()方法获取到该类的实例。ContentResolver中提供了一系列方法用于CRUD操作。
  不同于SQLiteDatebase,ContentResolver中的增删改查方法是不接收表名参数的,而是用一个Uri参数代替,这个参数被称为内容URI。内容URI给ContentResolver中的数据建立了唯一的标识符,它主要由两部分组成:authority和path。anthority用于对不同的应用程序做区分,一般采用程序包名的方式进行命名;path则是用于对同一应用程序中不同的表作区分,通常都会添加到authority后面。还需要在字符串的头部加上协议声明。

  例如  content://com.example.app.provider/table1

  在得到内容URI字符串后,还需要将它解析成Uri对象才可以作为参数传入。

  例如  Uri uri = Uri.parse("content://com.example.app.provider/table1")

三、常见问题

1.ContentProvider、ContentResolver与ContentObserver的区别

  • ContentProvider:把应用程序的私有数据信息暴露给其他应用程序,让其他应用程序可以访问到这些所有数据。如果要让其他应用程序访问,需对外暴露一个URI路径。
  • ContentResolver:根据URI路径对数据进行CRUD操作。
  • ContentObserver:Android系统包装好的回调,当ContentProvider数据发生变化时,会执行回调中的方法。ContentResolver发送通知,ContentObserver监听通知。

  
  
  
  

  
  
  
  
  
  
  

  
  
  
  
  
  
  

  
  
  

发布了123 篇原创文章 · 获赞 119 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/cbwem/article/details/89762000