Android广播接收器vs aidl

时间:2012-06-01 04:11:35

标签: android broadcastreceiver aidl

使用aidl与广播接收器在应用之间发送消息(背景和前台处理)的优缺点是什么?我一直在使用接收器,这是因为具有intent过滤器的订阅模型以及易用性/可扩展性。使用这种方法对抗AIDL有什么缺点吗?

THX 本

3 个答案:

答案 0 :(得分:1)

BroadcastReceiver

  • 这是异步通信。
  • 复杂度低-这是在进程之间进行通信的最简单方法。
  • 一对一通信-广播正在将消息同时传送给所有收件人。
  • Android OS 应用程序组件之间基于意图的通信
  • BroadcastReceiver.onReceive始终在主线程(UI线程)中运行
  • 通过意图发送数据时,应注意限制 数据大小为几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 OS传输的, 可能会带来安全威胁。其他应用可以听 广播。任何敏感数据都不应广播。

AIDL

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

  • 复杂度高-AIDL接口将同时请求发送到 服务,它必须处理多线程。

  • 一对一通信

  • 使用基础的Android OS Binder框架

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

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

  • 安全性:AIDL允许开发人员将其接口公开给 其他应用程序。 客户和服务双方均已达成协议 互相交流

答案 1 :(得分:0)

我认为一次退缩可能是电池寿命,因为接收器的监听不断给电池电量带来压力。 BroadCastReceivers可以有安全漏洞如果您在广播时不强调权限,除非您在本地广播然后您当然可以使用LocalBroadcastManager。

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

答案 2 :(得分:0)

AIDL

常用:

  • 允许应用充当服务器,以服务一个或多个客户端的请求-应用。

缺点:

  • 相对于广播 ,其实现更为复杂。
  • 当服务同时接收请求时,需要处理多线程

广播

常用:

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

结论:

并非所有规格都适合,每种方法在其效果更好的地方都有其用途。

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

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

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

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

    –受试者需要将其有趣的事件通知其观察者(很少发生)。 [与轮询模式不同]。

    –一个应用程序需要通知其他应用程序某些东西,并且不使用返回的响应。

两种方法都可以使用相同的方式(自定义android权限)进行保护。该操作仅允许使用相同密钥签名的应用共享通信。