android-contentresolver – ContentResolver用法

我是andriod domain的新手,正处于学习阶段.我有几个问题:

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

解决方法

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

What is the Content Resolver?

The Content Resolver is the single,global instance in your
application that provides access to your (and other applications’)
content providers. The Content Resolver behaves exactly as its name
implies: it accepts requests from clients,and resolves these requests
by directing them to the content provider with a distinct authority.
To do this,the Content Resolver stores a mapping from authorities to
Content Providers. This design is important,as it allows a simple and
secure means of accessing other applications’ Content Providers.

The Content Resolver includes the CRUD (create,read,update,delete)
methods corresponding to the abstract methods (insert,delete,query,
update) in the Content Provider class. The Content Resolver does not
kNow the implementation of the Content Providers it is interacting
with (nor does it need to kNow); each method is passed an URI that
specifies the Content Provider to interact with.

What is a Content Provider?

Whereas the Content Resolver provides an abstraction from the
application’s Content Providers,Content Providers provides an
abstraction from the underlying data source (i.e. a sqlite database).
They provide mechanisms for defining data security (i.e. by enforcing
read/write permissions) and offer a standard interface that connects
data in one process with code running in another process.

Content Providers provide an interface for publishing and consuming
data,based around a simple URI addressing model using the content://
schema. They enable you to decouble your application layers from the
underlying data layers,making your application data-source agnostic
by abstracting the underlying data source.

The Life of a Query

So what exactly is the step-by-step process behind a simple query? As
described above,when you query data from your database via the
content provider,you don’t communicate with the provider directly.
Instead,you use the Content Resolver object to communicate with the
provider. The specific sequence of events that occurs when a query is
made is given below:

  • A call to getContentResolver().query(Uri,String,String) is made. The call invokes the Content Resolver’s query
    method,not the ContentProvider's.

  • When the query method is invoked,the Content Resolver parses the uri argument and extracts its authority.

  • The Content Resolver directs the request to the content provider registered with the (unique) authority. This is done by calling the
    Content Provider’s query method.

  • When the Content Provider's query method is invoked,the query is performed and a Cursor is returned (or an exception is thrown). The resulting behavior depends entirely on the Content Provider’s implementation.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...