我希望每个应用程序都能将数据发送到我的服务.因此,我需要进行进程间通信.我可以找到的每个页面都建议使用Messenger,AIDL或Intents(BroadcastReceiver).到目前为止,我可以通过构建一些测试应用程序来弄清楚的是,如果在while(true)循环内发送多个线程,则BroadcastReceiver会非常慢,并且消息可能会丢失而不会发出通知. AIDL和Messenger不仅实现起来很复杂(需要服务,活页夹等),而且还可能提供奇怪的行为,例如当发送多个线程导致AIDL出现RemoteException(!!! FAILED BINDER TRANSACTION !!!)时使用单向关键字.我想确保交货.在应保证交付时,甚至有理由单单使用吗?
尽管如此,LocalSocket似乎非常易于使用(不需要服务,就像Java套接字一样工作).客户端应用程序可以只打开LocalSocket,连接到提供的地址,然后while(true)outputstream.writeObject();.
使用LocalSocket时有什么弊端,因为android开发人员页面上说:“某些应用程序尝试使用传统的Linux技术(例如网络套接字和共享文件)来实现IPC.我们强烈建议您改为将Android系统功能用于IPC”,但不做进一步评论在这个
解决方法:
Are there any downsides when using LocalSocket
> LocalSocket在框架级别没有安全性.尽管您可能“希望每个应用程序都能够将数据发送到我的服务”,但用户可能不会,这就是为什么标准IPC可以受到权限保护的原因.
> startService()和bindService()将导致创建服务实例,甚至在需要时为您启动一个进程,以处理请求.您的服务将不会一直运行.因此,无论如何都需要startService()或bindService().
标签:aidl,android-binder,multithreading,android,ipc
来源: https://codeday.me/bug/20191118/2028401.html