我希望每个应用程序都能向我的服务发送数据。因此我需要进程间通信。我能找到的每一页都建议使用信使、aidl或intents(广播接收器)。到目前为止,我可以通过构建一些测试应用程序来发现,broadcastReceiver非常慢,如果在while(true)
循环中使用多个线程发送消息,消息可能会丢失而不发出通知。aidl和messenger不仅实现起来很复杂(需要服务,绑定器,…),而且可以提供奇怪的行为,例如,当使用多个线程发送时,会导致remoteexception(!!!!活页夹事务失败!!!!)在使用单向关键字时使用aidl。我想确保交货有保证。是否有理由在保证交货的情况下使用oneway
?
不过,LocalSocket似乎非常容易使用(不需要服务,就像Java套接字一样工作)。客户端应用程序只需打开一个localsocket,连接到提供的地址,然后while(true) outputstream.writeObject();
使用localsocket有什么缺点吗?因为android开发者页面上说“一些应用程序试图使用传统的linux技术实现ipc,比如网络套接字和共享文件。我们强烈建议您改用android系统的ipc功能,但对此不作进一步评论。
最佳答案
使用localsocket有什么缺点吗LocalSocket
的框架级别没有安全性。虽然您可能“希望每个应用程序都能够向我的服务发送数据”,但用户可能不会,这就是为什么标准IPC可以受权限保护的原因。startService()
和bindService()
将导致创建服务的实例,甚至在需要处理请求时为您启动进程。您的服务不会一直运行。所以,你无论如何都需要startService()
或bindService()
。