Android远程进程:messenger vs aidl?哪个更好?

时间:2011-10-21 20:28:11

标签: android android-service

我目前有一个远程服务,可以与同一个应用程序上的活动进行持续通信。

我需要在某些时候广泛传入和传出消息。哪种消息传递方式更好,更快,更适合电池使用?使用消息或aidl接口?

截至目前我正在使用aidl接口,但由于某种原因,我认为在附加监听器时会有很多开销......

任何反馈都非常感谢。

1 个答案:

答案 0 :(得分:6)

  

我目前有一个远程服务,可以与同一个应用程序上的活动进行持续通信。

远程服务通常不是一个好主意。

  

好吧,我的应用程序是一个多媒体音频应用程序,需要在后台运行,这需要大量资源:内存。在与我的活动相同的过程中,这很可能会导致问题达到每个流程的资源使用限制。

然后使用更少的内存。即使有活动,音频播放器也不需要超过每个进程的RAM限制。

  

此外,如果您的UI由于某种原因而崩溃,则您的服务不会带来好处。

这不是浪费设备RAM和CPU时间的特别好的理由。对于服务器来说,这是一种很好的方法,对于嵌入式系统来说则更是如此。

  

哪种消息传递方式更好,更快,更适合电池使用?使用消息或aidl接口?

它们应该具有可比性。 IPC考虑应该淹没大多数其他影响。例如,从我的一本书中引用自己:

  

例如,在本书源的CPU-Java / AIDLOverhead目录中   代码,你会发现一对项目实现相同的do-nothing   等效服务中的方法。一个使用AIDL并且远程绑定   来自单独的客户申请;另一个是客户端的本地服务   申请本身。然后客户端调用100万个无操作方法   两种服务中的每一种的时间。平均而言,在三星Galaxy Tab上   10.1,远程服务的100万次呼叫大约需要170秒   本地服务大约需要170毫秒。因此,开销   单个远程方法调用很小(约170微秒),但是   在循环中执行大量操作,或者当用户使用ListView时,可能会变为   引人注目。

话虽如此,如果您担心开销(但坚持使用远程服务),您可能会更好地尝试两者并使用日志记录来确定是否有明显的赢家。