【发布时间】:2018-09-07 22:17:12
【问题描述】:
我正在学习关于 Udacity 的 Android 课程,并在标题中遇到了一位同学提出的问题。
引用视频:
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(DroidTermsExampleContract.CONTENT_URI, null, null, null, null);
此代码访问正确的内容提供程序并获取一些数据 从中。我们这里有一些新的词汇概念,所以我要走了 把它分解。第一个新概念是 ContentResolver。所以我们的 原图相当简单。让我们看看这张图 我们以前见过。
这张图更准确的版本是这样的。
并且 此绘图涉及内容解析器。那么这样做的目的是什么 让这个类位于您的应用程序和直接访问 内容提供者?
如果你仔细想想,有多个内容 您的手机上的提供商,并且您在添加更多内容提供商时 下载存储本地数据的应用程序,这些应用程序使用内容提供程序。 除了 DroidTermsExample 内容提供者之外,您还有一个内容 联系人提供程序,您的设备有一个用于 设备,一种跟踪用户警报的设备,日历提供程序, 和其他一些人。
此外,您的应用并不是唯一在 设备。还有其他应用程序可能也在使用内容 供应商并行。管理内容提供商正在与之交谈的内容 哪些应用程序,并保持所有数据同步,可能会变成一个巨大的 交通阻塞。这就是内容解析器的用武之地。
内容解析器充当每个应用程序和 内容提供者,或它想要访问的提供者。它处理 进程间通信并使一切保持同步和运行 顺利。 即使您有五个进程访问两个内容 供应商。
因此,无论您想在何处使用内容提供程序,您都需要 通过 ContentResolver 来完成。好的,现在你知道这是什么了 第一行正在做,
ContentResolver resolver = getContentResolver();
让我们参考系统的内容 解析器。这是访问内容提供者的下一步。
视频中的解释(尤其是上面的粗体标记线)清楚地让我认为Android OS 有一个ContentResolver。
它的工作是让所有想要与一个或多个应用程序的内容提供者对话的应用程序的生活更轻松。
然而,同学们似乎有相反的理解。给出的一些论点是:
内容解析器是您的单个全局实例 提供对您(和其他应用程序)的访问权限的应用程序 内容提供者。
来自Android docs:
当您想要访问内容提供程序中的数据时,您可以使用 ContentResolver 对象在你的应用程序的 Context 中进行通信 以提供者为客户。
声明:
既然在你的应用程序中提到了 ContentResolver 对象 上下文,因此每个应用程序都有自己的内容解析器
我仍然有一个简单的公平理解,即操作系统提供了一个 ContentResolver,然后将此解析器带到给定应用程序的上下文中以使用它。不可以吗?
这是我的第一门 Android 课程,我绝对是初学者。如果我对这个概念有错误的理解,有人可以澄清一下吗?
【问题讨论】:
-
是的,你是对的!!
标签: java android android-contentprovider android-contentresolver