【问题标题】:Android Remote methods (AIDL) vs Intents - performance & battery usageAndroid 远程方法 (AIDL) 与 Intents - 性能和电池使用情况
【发布时间】:2011-06-28 06:50:45
【问题描述】:

我的团队正在开发一个 Android 项目,该项目包含多个交换数据的 Android 应用程序(在同一部手机上)。这个想法是有几个应用程序正在收集一些数据并将这些数据发送到主应用程序。这里的主要挑战是在 CPU 负载和电池使用方面尽可能便宜地进行交换。

据我所知,实现进程间通信有两种方式:

  1. 意图和活动 - 一项活动捕捉另一项活动的意图
  2. 远程方法(通过 AIDL)

我想知道在以下场景中哪种更有效:

  1. 非常频繁的消息/方法调用,发送的数据/流量很少(例如,只传递一堆原语)
  2. 具有大流量块的消息/方法调用频率较低(例如,收集数据并定期发送几 KB/MB 的数据)
  3. 交换大量数据块的非常频繁的消息/方法调用

我将不胜感激任何帮助,无论是在比较方面还是在基准的参考/链接方面。

【问题讨论】:

  • 在您的进程间通信选项列表中,您还应该添加 ContentProvider。这也是在多个应用程序之间共享集中式数据(所有读取和所有可能写入)的有效方式。

标签: android performance android-intent interprocess aidl


【解决方案1】:

我认为对于 1) 你最好使用远程服务,对于 2) 和 3) 你最好写入文件或数据库。 Intent 更多用于不频繁的进程间通信以及启动应用和服务。

【讨论】:

  • 谢谢。 Zelimir 提到的 ContenProvider 呢?
  • 应用程序是否在同一个包中?如果是这样,您可以直接使用数据库。如果他们不是 ContentProvider 是正确的方法:)
  • 使用该数据库存储临时数据(例如将一些数据从一种方法传递到另一种方法)的成本是多少?
【解决方案2】:

您也可以尝试使用本机代码来创建共享内存作为替代选项。查看此链接了解详情: http://www.androidenea.com/2010/03/share-memory-using-ashmem-and-binder-in.html

【讨论】:

    【解决方案3】:

    我建议您使用Unix domain sockets 机制来解决方案 3)。高频率会使文件/数据库的使用变得复杂,根据this answer,不建议使用Android的IPC,因为每个对象都必须转换为(并从)一个Parcel,这需要时间。你也可以使用 Unix 管道,但有一些限制:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多