ContentResolver用法

时间:2013-01-16 10:10:24

标签: android-contentresolver

我是andriod domain的新手,正处于学习阶段。我收到了几个疑问:

每个应用都有单个ContentResolver对象吗? 它是单身对象吗? 谁管理这个对象生命周期? 如果它是单例,它如何处理查询ContentProvider的多个请求?

1 个答案:

答案 0 :(得分:14)

来自Alex Lockwood的博客 - http://www.androiddesignpatterns.com/2012/06/content-resolvers-and-content-providers.html

  

什么是内容解析器?

     

内容解析器是您的单一全局实例   提供对您(和其他应用程序)的访问的应用程序   内容提供商。内容解析器的行为与其名称完全相同   暗示:它接受来自客户端的请求,并解析这些请求   通过将它们指向具有不同权限的内容提供者。   为此,内容解析器存储权限到的映射   内容提供商。这种设计很重要,因为它允许简单和   访问其他应用程序的内容提供商的安全方法。

     

内容解析器包括CRUD(创建,读取,更新,删除)   对应抽象方法的方法(插入,删除,查询,   在Content Provider类中更新)。内容解析器没有   了解它正在进行交互的内容提供商的实施   与(也不需要知道);每个方法都传递一个URI   指定要与之交互的内容提供者。

     

什么是内容提供商?

     

而内容解析器提供了抽象   应用程序的内容提供商,内容提供商提供   从底层数据源(即SQLite数据库)的抽象。   它们提供了定义数据安全性的机制(即通过强制执行)   读/写权限)并提供连接的标准接口   代码在另一个进程中运行的一个进程中的数据。

     

内容提供商提供发布和使用的界面   数据,基于简单的URI寻址模型使用内容://   架构。它们使您可以从应用程序中提取应用程序层   底层数据层,使您的应用程序与数据源无关   通过抽象底层数据源。

     

查询的有效期

     

那么简单查询背后的逐步过程到底是什么?如   如上所述,当您通过数据库查询数据库中的数据时   内容提供商,您不直接与提供商沟通。   而是使用Content Resolver对象与   供应商。查询所在的特定事件序列   制作如下:

     
      
  • 拨打getContentResolver().query(Uri, String, String, String, String)。该调用调用内容解析器的查询
      方法,而不是ContentProvider's

  •   
  • 调用query方法时,内容解析器会解析uri参数并提取其权限。

  •   
  • 内容解析程序将请求定向到使用(唯一)权限注册的内容提供程序。这是通过调用
    来完成的   内容提供商的query方法。

  •   
  • 调用Content Provider's query方法时,将执行查询并返回Cursor(或抛出异常)。该
      产生的行为完全取决于Content Provider的   实施

  •