Android:组件之间的意图和交换数据

Posted

技术标签:

【中文标题】Android:组件之间的意图和交换数据【英文标题】:Android: Intent and exchanging data between components 【发布时间】:2016-07-25 15:53:36 【问题描述】:

我阅读了有关进程间通信 (IPC) 和创建从一个组件到另一个组件的发送数据的信息。 我所知道的是 IPC 定义了不同组件之间的通信通道。 通道将具有用于组件发送数据的编程接口。创建界面的方式有AIDL、Binder、Messenger等。 创建接口后,通过它发送的数据必须是Parcel。 所以总结步骤如下: 1.创建编程接口。 2. 将接口绑定到应用组件。 3. 向该组件发送数据的组件必须将数据转换为 Parcel。 但突然发现所谓的 Intent 可以将数据从一个组件发送到另一个组件而无需这种开销。 我需要说明 Intent 如何在不创建接口的情况下发送数据? Intent 内部是否有接口? Intent与IPC、绑定服务、接口是什么关系?

【问题讨论】:

【参考方案1】:

哇,你在这里有很多困惑。让我们看看我能不能把事情弄清楚。

1)IPC 不会将数据从一个组件发送到另一个组件(它可以,但它是一种低效的方法)。 IPC 将数据从一个进程发送到另一个进程。 android 应用程序通常是一个进程,尽管它不是必须的(开发人员有时会将服务放入另一个进程中)。这是一个重要区别的原因是进程不能共享内存,因此需要像 IPC 这样的特殊方法在它们之间发送任何数据。

2) 组件之间发送的数据不必是 Parcel。这是一种方式,也是 Android 在发送启动参数时使用的方式。不过没必要。

3) 仅当两者在同一个进程中时,才能使用 Binder 与服务对话。这是一种完全避免使用IPC的方法。

4)AIDL 是 IPC 方法的包装器。 AIDL 使用 IPC,它只是试图让它看起来像对客户端的正常函数调用。

5) Intent 对象是在 Android 中启动服务或活动所需的所有数据的抽象。它将包括参数,这些参数可能在 Parcels 中,也可能不在 Parcels 中。它可能会也可能不会使用 IPC 来发送这些参数(如果目标 Activitiy 或 Service 在另一个 APK 中,它会。如果不是,则可能不会)。

我认为这里的问题是您并不真正了解什么是进程、什么是 Android 组件以及进程如何实际通信。我建议对此进行一些研究。

【讨论】:

那么我们可以说是在同一个进程中的两个activity之间进行通信,使用Binder,而Intent是Android为Binder提供的一个实现?

以上是关于Android:组件之间的意图和交换数据的主要内容,如果未能解决你的问题,请参考以下文章

Android-活动(Activity)Intent

Android Intent意图 : 基本使用

Android显式意图和隐式意图

Intent 意图

Android--Intent(意图)

Android知识合集