android binder socket,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().

标签:aidl,android-binder,multithreading,android,ipc

来源: https://codeday.me/bug/20191118/2028401.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值