Android广播接收器vs aidl

问题描述 投票:7回答:2

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

Thx Ben

android broadcastreceiver aidl
2个回答
1
投票

广播接收器

  • 这是一种异步通信。
  • 复杂性很低 - 这是在流程之间进行通信的最简单方法。
  • 一对一通信 - 广播正在同时向所有收件人传送消息。
  • 基于Android OS意图的应用程序组件之间的通信
  • BroadcastReceiver.onReceive总是在主线程(UI线程)中运行
  • 通过intent发送数据时,应小心将数据大小限制为几KB。发送过多数据可能导致系统抛出TransactionTooLargeException异常。 https://developer.android.com/guide/components/activities/parcelables-and-bundles Intents可以传输高达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允许开发人员将其接口公开给其他应用程序。客户和服务都同意,以便彼此通信。

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.