我目前有一个远程服务,可以与同一个应用程序上的活动进行持续通信。
我需要在某些时候广泛传入和传出消息。哪种消息传递方式更好,更快,更适合电池使用?使用消息或aidl接口?
截至目前我正在使用aidl接口,但由于某种原因,我认为在附加监听器时会有很多开销......
任何反馈都非常感谢。
答案 0 :(得分:6)
我目前有一个远程服务,可以与同一个应用程序上的活动进行持续通信。
远程服务通常不是一个好主意。
好吧,我的应用程序是一个多媒体音频应用程序,需要在后台运行,这需要大量资源:内存。在与我的活动相同的过程中,这很可能会导致问题达到每个流程的资源使用限制。
然后使用更少的内存。即使有活动,音频播放器也不需要超过每个进程的RAM限制。
此外,如果您的UI由于某种原因而崩溃,则您的服务不会带来好处。
这不是浪费设备RAM和CPU时间的特别好的理由。对于服务器来说,这是一种很好的方法,对于嵌入式系统来说则更是如此。
哪种消息传递方式更好,更快,更适合电池使用?使用消息或aidl接口?
它们应该具有可比性。 IPC考虑应该淹没大多数其他影响。例如,从我的一本书中引用自己:
例如,在本书源的CPU-Java / AIDLOverhead目录中 代码,你会发现一对项目实现相同的do-nothing 等效服务中的方法。一个使用AIDL并且远程绑定 来自单独的客户申请;另一个是客户端的本地服务 申请本身。然后客户端调用100万个无操作方法 两种服务中的每一种的时间。平均而言,在三星Galaxy Tab上 10.1,远程服务的100万次呼叫大约需要170秒 本地服务大约需要170毫秒。因此,开销 单个远程方法调用很小(约170微秒),但是 在循环中执行大量操作,或者当用户使用ListView时,可能会变为 引人注目。
话虽如此,如果您担心开销(但坚持使用远程服务),您可能会更好地尝试两者并使用日志记录来确定是否有明显的赢家。