【问题标题】:Intent vs Content Provider in androidandroid中的意图与内容提供者
【发布时间】:2015-08-09 03:19:04
【问题描述】:

我是 android 应用程序开发的新手,在研究基本的 android 组件时,我对意图和内容提供者感到困惑,因为两者都用于将数据从一个应用程序/组件发送到另一个应用程序/组件。在意图的情况下,我们可以使用 bundle 或 extras 发送数据,所以我们为什么要使用内容提供者。有人可以举个例子来解释一下。

我们也可以仅使用内容提供程序访问 android 中的数据库吗?这是我们使用内容提供程序的唯一原因吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    两者都用于将数据从一个应用程序/组件发送到另一个应用程序/组件

    不是真的。

    Android 中有四个组件:

    • Activity
    • Service
    • BroadcastReceiver
    • ContentProvider

    Intent 不是这些。 Intent 在我们启动活动、启动或绑定到服务或发送广播时参与。然而,将IntentContentProvider 进行比较类似于将铲子与靴子进行比较,认为两者都可以用来携带污垢。虽然确实如此,但通常靴子涉及携带污垢,但携带污垢的实际方式是由其他东西处理的,例如独轮车。

    在意图的情况下,我们可以使用 bundle 或 extras 发送数据,那么我们为什么要使用内容提供者。

    我们经常针对不同的情况使用不同的工具。例如,您会发现用渔网携带水相当困难。

    四个组件中的每一个都具有不同的作用,尤其是在与进程间通信 (IPC) 的关系方面:

    • Activity 驱动着我们的大部分用户界面,包括从其他应用启动 Activity(或让我们的某个 Activity 由其他应用启动)

    • Service 存在于逻辑上与用户界面分离的长时间运行操作,包括使用由其他应用实现的服务(或让其他应用使用您发布的服务)

    • BroadcastReceiver 是一个发布/订阅消息系统,允许您跨进程边界向任意订阅者发送消息,或订阅来自任意发送者的消息

    • ContentProvider 用于批量数据传输,无论是以数据库样式结构(行和列)的形式还是以流的形式,尤其适用于与其他应用程序一起使用

    我们也可以只使用内容提供者访问android中的数据库

    没有。毕竟,如果这是真的,就不可能访问数据库。 ContentProvider 不会魔法出现。它必须由程序员编写。如果ContentProvider 只能通过ContentProvider 访问数据库,我们就会遇到问题。

    这是我们使用内容提供商的唯一原因吗?

    没有。除了提供数据库风格的 API 之外,ContentProvider 还可以发布流。这对于在应用程序之间获取任意数据非常重要,例如电子邮件客户端将 PDF 附件提供给 PDF 查看器。

    【讨论】:

    • 完美的解释,太一行一行了。非常感谢:)
    • 需要一点建议。我应该先学习什么,内容提供者还是android数据库?
    • @Shivamaggarwal:两者都不是。或者,更准确地说,提出一个真正的问题,然后了解解决问题所需的内容。例如,如果您的问题涉及获取联系人数据,您需要学习如何使用 ContentProvider,因为这就是 Android 为您提供联系人数据的方式。
    • 哦,我想我错了。我正在做的是,我首先尝试从 developer.google api 指南中学习基本的 android 组件(我觉得这对于初学者来说有时是一项艰巨的工作),然后我打算将所有这些都嵌入到一个 android 应用程序中记住。所以基本上有两种方法 - 1.首先学习所有基本组件,然后实现它们 2.只学习你当前需要的那些东西。 – 那么我应该采用哪种方法呢?
    • @Shivamaggarwal:我无法回答这个问题,因为我不知道你最喜欢学习什么。
    【解决方案2】:

    Intent 是一种用于发送/接收事务性命令和数据的消息传递架构。内容提供者是用于创建、更新、删除和同步操作的存储数据的抽象接口。

    【讨论】:

    • 那么数据库呢?
    • 数据库,比如android内置的sqllite数据库,是数据的一种存储机制。内容提供者可以使用数据库、文件存储或其他存储机制。内容提供者接口允许您从应用程序的其余部分或其他应用程序中抽象出该存储机制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多