Android的广播接收机VS AIDL(Android broadcast receivers v

2019-09-17 16:13发布

什么是使用AIDL VS广播接收机对应用程序之间发送消息(背景和前景处理)的利弊? 我一直在使用的接收器,这是很好由于订阅模式与意图过滤器,以及易用性/可扩展性。 是否有缺点,使用这种方法来VS AIDL?

THX奔

Answer 1:

广播接收器

  • 这是一个异步通信。
  • 复杂度低 -这是进程间通信的最简单的方法。
  • 一到所有通信 -广播同时传送信息给所有收件人。
  • 应用程序组件之间的基于 Android操作系统的意图沟通
  • BroadcastReceiver.onReceive总是在主线程(UI线程)运行
  • 当通过一个意图发送数据时,你应该小心的数据大小限制为几KB。 发送过多的数据会导致系统抛出一个异常TransactionTooLargeException。 https://developer.android.com/guide/components/activities/parcelables-and-bundles

    该意图可传输高达1MB的价值数据的语句是肯定不对的,500KB更准确。 https://www.neotechsoftware.com/blog/android-intent-size-limit “

  • 安全性:广播横跨Android操作系统传输 ,可能带来安全threat.Other的应用程序可以收听广播。 任何敏感数据不应该被播出。

AIDL

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

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

  • 一对一沟通

  • 使用底层Android操作系统的活页夹框架

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

  • 活页夹的事务缓冲器具有有限的固定大小,目前的1Mb,其通过所有交易在该过程进展共享。 https://developer.android.com/reference/android/os/TransactionTooLargeException.html “

  • 安全性:AIDL是允许开发人员暴露其接口,其他应用程序。 客户端和服务,才能相互沟通商定



Answer 2:

我认为,一个退可能是电池寿命,具有接收器监听不断投入紧张的电池电量。 BroadCastReceivers可以有安全漏洞,如果你也上广播时,除非你的广播本地那么你可以使用,当然LocalBroadcastManager不重视的权限。

AIDL我似乎更安全,但很难抽象为一组普遍使用。 我喜欢AIDL文件时,我有我想在另一个进程,使许多不同的API调用。 它就像一个遥控器。 用Broadcastreciever可能较难直接调用自定义的方法做的工作。



Answer 3:

AIDL

常见用途:

  • 允许应用程序作为供应的一个或多个客户-apps请求的服务器。

缺点:

  • 相对于广播 ,它的实现是比较复杂的。
  • 需要处理多线程的服务同时接收请求

广播

常见用途:

  • 允许应用程序发送广播到一个或多个应用程序(听众)大约发生在应用一些有趣的事情。

结论:

因为它不是一个一刀切的情况下,每一种方法都有它的用途在那里执行得更好。

  • 例如其更有效地在样病例使用AIDL:

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

    - 客户端不仅会向服务器发送一个请求,但也消耗了返回的响应。

  • 在另一方面它更有效地在这样的情况下使用广播:

    - 主题需要通知他的一个有趣的事件的观察员(偶尔出现)。 [不同于轮询模式。

    - 一个应用程序需要通知的事另一个应用程序并且不消耗返回的响应。

这两种方法都可以使用相同的方法,自定义Android权限进行保护。 只允许使用相同的密钥签名的应用程序在通信共享。



文章来源: Android broadcast receivers vs aidl