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

我阅读了有关进程间通信 (IPC) 和创建从一个组件到另一个组件的发送数据的信息。
我所知道的是 IPC 定义了不同组件之间的通信通道。
通道将具有用于组件发送数据的编程接口。创建界面的方式有AIDL、Binder、Messenger等。
创建接口后,通过它发送的数据必须是Parcel。 所以总结步骤如下:
1.创建编程接口。
2. 将接口绑定到应用组件。
3. 向该组件发送数据的组件必须将数据转换为 Parcel。

但突然发现所谓的 Intent 可以将数据从一个组件发送到另一个组件而无需这种开销。
我需要说明 Intent 如何在不创建接口的情况下发送数据?
Intent 内部是否有接口?
Intent与IPC、绑定服务、接口是什么关系?

【问题讨论】:

    标签: java android android-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提供的一个实现?
    猜你喜欢
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2017-09-01
    • 1970-01-01
    相关资源
    最近更新 更多