微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android IPC LocalSocket与Binder(AIDL)

我希望每个应用程序都能将数据发送到我的服务.因此,我需要进行进程间通信.我可以找到的每个页面都建议使用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().

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐