8

使用aidl与广播接收器在应用程序之间发送消息(用于后台和前台处理)的优缺点是什么?我一直在使用接收器,这得益于带有意图过滤器的订阅模型以及易用性/可扩展性。将这种方法用于 vs AIDL 是否有缺点?

谢谢本

4

3 回答 3

1

广播接收器

  • 它是一种异步通信。
  • 复杂性低- 这是进程之间通信的最简单方法。
  • 一对多通信- 广播将消息同时传输给所有接收者。
  • Android OS应用程序组件之间基于意图的通信
  • BroadcastReceiver.onReceive 始终运行在主线程(UI 线程)
  • 通过 Intent 发送数据时,应小心将数据大小限制为几 KB。发送过多数据会导致系统抛出 TransactionTooLargeException 异常。 https://developer.android.com/guide/components/activities/parcelables-and-bundles

    Intent 可以传输高达 1Mb 的数据的说法肯定是错误的,500Kb 更准确。 https://www.neotechsoftware.com/blog/android-intent-size-limit "

  • 安全性:广播在 Android 操作系统中传输,可能会带来安全威胁。其他应用程序可以收听广播。不应传播任何敏感数据。

AIDL

  • 它是同步和异步进程间通信。默认情况下,AIDL 通信是同步的。为了使 AIDL 通信异步,使用“oneway”关键字。

  • 复杂性很高- AIDL 接口向必须处理多线程的服务发送同时请求。

  • 一对一沟通

  • 使用底层 Android OS Binder 框架

  • 需要编写线程安全的代码。

  • Binder 事务缓冲区有一个有限的固定大小,目前为 1Mb,由进程正在进行的所有事务共享。 https://developer.android.com/reference/android/os/TransactionTooLargeException.html "

  • 安全性:AIDL 允许开发人员将他们的接口暴露给其他应用程序。 客户端和服务都同意以便相互通信

于 2019-04-24T16:25:24.413 回答
0

我认为一个缺点可能是电池寿命,因为让接收器不断收听会对电池电量造成压力。如果您在广播时不强调权限,BroadCastReceivers 可能存在安全漏洞,除非您在本地广播,那么您当然可以使用 LocalBroadcastManager。

对我来说,AIDL 似乎更安全,但更难抽象以在小组中普遍使用。当我想在另一个进程中进行许多不同的 API 调用时,我喜欢 AIDL 文件。它就像一个遥控器。使用 Broadcastreciever 可能更难直接调用自定义方法来完成工作。

于 2014-03-21T19:00:18.130 回答
0

AIDL

常见用途:

  • 允许应用充当服务器,为一个或多个客户端(应用)的请求提供服务。

缺点:

  • 相对于 Broadcasting,它的实现更加复杂。
  • 需要处理多线程,因为服务同时接收请求

广播

常见用途:

  • 允许应用向一个或多个应用(侦听器)发送关于应用中发生的有趣事情的广播。

综上所述:

由于并非一刀切,每种方法都有其表现更好的用途。

  • 例如,在以下情况下使用 AIDL 会更有效:

    – 需要同时为多个客户端提供服务的服务器

    – 客户端不仅会向服务器发送请求,还会消费返回的响应。

  • 另一方面,在以下情况下使用广播更有效:

    – 一个主体需要通知他的观察者一个有趣的事件(不经常发生)。[与轮询模式不同]。

    – 一个应用程序需要通知另一个应用程序某事并且不使用返回的响应。

这两种方法都可以使用相同的方式来保护,即自定义 android 权限。这仅允许使用相同密钥签名的应用程序共享通信。

于 2019-07-09T06:33:46.420 回答