android中的Intent vs Content Provider

时间:2015-08-08 19:05:16

标签: android

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

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

2 个答案:

答案 0 :(得分:10)

  

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

不是。

Android中有四个组件:

  • Service
  • BroadcastReceiver
  • ContentProvider
  • Intent

Intent不是那些。当我们启动活动,启动或绑定服务或发送广播时,Intent 涉及。然而,将ContentProviderActivity进行比较类似于将铲子与靴子进行比较,认为两者都可用于携带污垢。虽然如此,通常情况下引导涉及携带污垢,但实际携带污垢的方法是由其他东西处理,例如手推车。

  

如果是意图,我们可以使用bundle或extras发送数据,那么为什么我们要使用内容提供者。

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

这四个组件中的每一个都有不同的作用,特别是与进程间通信(IPC)有关:

  • Service驱动我们的大部分用户界面,包括从其他应用启动活动(或让其他应用启动我们的某项活动)

  • 对于长期运行的操作存在BroadcastReceiver,这些操作在逻辑上与用户界面分离,包括使用由其他应用程序实现的服务(或让其他应用程序与您发布的服务一起使用)< / p>

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

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

  

我们也可以使用内容提供商

访问android中的数据库

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

  

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

没有。除了提供数据库样式的API之外,include "Bar.h" class Foo { const Bar mBar; //because it is Bar and not Bar& or Bar* forward declarations are not possible public: Foo(const Bar &bar); }; 还可以发布流。这对于在应用程序之间获取任意数据非常重要,例如电子邮件客户端可以为PDF查看器提供PDF附件。

答案 1 :(得分:2)

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