我是 android 领域的新手,正处于学习阶段。我有几个疑问:
每个应用程序是否有单个 ContentResolver 对象?
它是一个单例对象吗?
谁管理这个对象的生命周期?
如果是单例,它如何处理查询ContentProvider的多个请求?
来自亚历克斯·洛克伍德的博客 -http://www.androiddesignpatterns.com/2012/06/content-resolvers-and-content-providers.html http://www.androiddesignpatterns.com/2012/06/content-resolvers-and-content-providers.html
什么是内容解析器?
内容解析器是您的单个全局实例
提供对您的(和其他应用程序)的访问的应用程序
内容提供商。内容解析器的行为正如其名称一样
意味着:它接受来自客户端的请求,并解决这些请求
将他们引导至具有明确权限的内容提供商。
为此,内容解析器存储从权限到
内容提供商。这种设计很重要,因为它允许简单且
访问其他应用程序的内容提供商的安全方法。
内容解析器包括 CRUD(创建、读取、更新、删除)
与抽象方法相对应的方法(插入、删除、查询、
更新)在内容提供者类中。内容解析器不
了解正在交互的内容提供商的实现
与(也不需要知道);每个方法都会传递一个 URI
指定要与之交互的内容提供者。
什么是内容提供商?
而内容解析器提供了对
应用程序的内容提供商,内容提供商提供了一个
从底层数据源(即 SQLite 数据库)抽象。
它们提供了定义数据安全的机制(即通过强制执行
读/写权限)并提供连接的标准接口
一个进程中的数据,而另一进程中运行的代码。
内容提供者提供发布和消费的接口
数据,基于使用 content:// 的简单 URI 寻址模型
架构。它们使您能够将应用程序层与
底层数据层,使您的应用程序与数据源无关
通过抽象底层数据源。
查询的生命周期
那么简单查询背后的分步过程到底是什么呢?作为
如上所述,当您通过以下方式从数据库查询数据时
内容提供商,您不直接与提供商通信。
相反,您使用内容解析器对象来与
提供者。查询时发生的特定事件顺序
制作如下:
致电getContentResolver().query(Uri, String, String, String, String)
被制成。该调用调用内容解析器的查询
方法,而不是ContentProvider's
.
当。。。的时候query
方法被调用,内容解析器解析uri
论证并提取其权威。
内容解析器将请求定向到向(唯一)机构注册的内容提供商。这是通过调用来完成的
内容提供商的query
method.
当。。。的时候Content Provider's query
调用方法,执行查询并返回 Cursor(或引发异常)。这
由此产生的行为完全取决于内容提供商的
执行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)