2015-08-08 116 views
6

我是新的android应用程序开发,并在学习基本的android组件时,我意图和内容提供者之间感到困惑,因为两者都被用于将数据从一个应用程序/组件发送到另一个应用程序/组件。在意图的情况下,我们可以使用捆绑或额外发送数据,为什么我们使用内容提供商。有人能用一个例子来解释我吗?

我们也可以只使用内容提供者访问android中的数据库,这是我们使用内容提供者的唯一原因吗?意图vs内容提供者在android

回答

9

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

不是真的。

有四个组件中的Android:

  • Activity
  • Service
  • BroadcastReceiver
  • ContentProvider

一个Intent是无那些。 Intent涉及当我们开始一个活动,开始或绑定到一个服务,或发送广播。然而,比较IntentContentProvider类似于将铲与靴子进行比较,认为两者都可用于携带污物。虽然是真的,但通常一个启动是涉及携带污垢,但携带污垢的实际手段是由别的东西,如独轮车处理。

如果有意图,我们可以使用捆绑或附加功能发送数据,那么为什么我们要使用内容提供者。

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

每个四个分量都具有不同的作用,特别是在关系到进程间通信(IPC):

  • 一种Activity驱动散装我们的用户界面,包括启动从其他应用的活动(或有我们的活动之一,由其他应用程序启动)

  • 一个Service存在逻辑上从用户界面分离再运行的操作,包括由其他应用程序实现的服务工作(或有其他应用程序与服务合作您发布)

  • 一个BroadcastReceiver是一个发布/订阅消息系统,让你将消息发送到任意订户,或订阅来自任意发件人的邮件,跨进程边界

  • 一个ContentProvider是批量数据传输,无论是在一个数据库式结构的形式(行和列)或以流的形式,特别是用于与其他应用程序的工作

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

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

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

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

+0

完美的解释,一行一行。非常感谢:) –

+0

需要一点建议。我应该先学习什么,内容提供者或android数据库? –

+0

@Shivamaggarwal:都不是。或者,更准确地说,想出一个真正的问题,然后学习你需要解决的问题。例如,如果您的问题涉及获取联系人数据,则需要了解如何使用“ContentProvider”,因为这是Android为您提供联系人数据的方式。 – CommonsWare

2

意图是用于发送/接收事务性命令和数据的消息体系结构。内容提供者是存储数据的抽象接口,用于创建,更新,删除和同步操作。

+0

和数据库呢? –

+0

数据库(例如,内置在sqllite数据库中的android)是数据的一种存储机制。内容提供者可以使用数据库,文件存储或其他存储机制。内容提供者接口允许您从应用程序或其他应用程序的其余部分抽象出该存储机制。 –

相关问题