我希望每个应用都能够将数据发送到我的服务。因此我需要进程间通信。我能找到的每个页面都建议使用Messenger,AIDL或Intents(BroadcastReceiver)。到目前为止,我可以通过构建一些测试应用程序来解决的问题是,如果在while(true)
循环中发送多个线程,则BroadcastReceiver非常慢并且消息可能会丢失而不会发出通知。 AIDL和Messenger不仅实现起来很复杂(需要服务,绑定器......),但是可以提供奇怪的行为,例如当使用AIDL发送多个线程导致RemoteException(!!! FAILED BINDER TRANSACTION !!!)时使用oneway关键字。我想确保交货有保证。是否有理由在保证交付时使用oneway
?
尽管如此,LocalSocket似乎非常容易使用(不需要服务,就像java socket一样)。客户端应用程序只需打开LocalSocket,连接到提供的地址,然后while(true) outputstream.writeObject();
使用LocalSocket时是否有任何缺点,因为android开发者页面说“有些应用尝试使用传统的Linux技术(如网络套接字和共享文件)实现IPC。我们强烈建议您使用IPC的Android系统功能”但是没有进一步评论这个
答案 0 :(得分:3)
使用LocalSocket
时是否有任何缺点
LocalSocket
的框架级别没有安全性。虽然您可能希望每个应用程序都能够将数据发送到我的服务",但用户可能不会,这就是为什么标准IPC可以通过权限进行保护。
startService()
和bindService()
将导致创建服务实例,甚至为您启动流程。您的服务不会一直运行。因此,无论如何,您需要startService()
或bindService()
。
答案 1 :(得分:0)
AIDL:仅当您允许来自不同应用程序的客户端 访问Rect
的服务并希望处理多线程时,才需要使用AIDL
为您服务。
活页夹:如果您不需要需要在不同的应用程序中执行并发 IPC
,则应通过实现IPC
。
Messenger:如果您想执行Binder
,但又不需要需要处理多线程,请使用IPC
来实现您的界面。