我希望每个应用程序都能够向我的服务发送数据。因此,我需要进程间的沟通。我能找到的每一页都建议使用Messenger、AIDL或Intents (BroadcastReceiver)。到目前为止,我通过构建一些测试应用程序可以发现,如果在BroadcastReceiver循环中使用多个线程发送消息,那么while(true)非常慢,消息可能会在没有通知的情况下丢失。AIDL和Messenger不仅难以实现(需要服务、绑定、.)但是可以提供奇怪的行为,例如,当使用多个线程发送时,会产生RemoteException (!)失败的活页夹交易)只在使用单向关键字时使用AIDL。我想确保交货有保证。在保证交付时,甚至有理由使用oneway吗?
尽管如此,LocalSocket似乎非常容易使用(不需要服务,就像LocalSocket一样工作)。客户端应用程序可以打开一个LocalSocket,连接到所提供的地址,然后再连接到while(true) outputstream.writeObject();。
在使用LocalSocket时有什么缺点吗?因为android页面上说:“一些应用试图使用传统的Linux技术,如网络套接字和共享文件来实现IPC。我们强烈鼓励您使用Android系统功能来实现IPC”,但没有进一步评论。
发布于 2016-06-30 14:01:39
使用LocalSocket有什么坏处吗?
LocalSocket在框架级别上没有安全性。虽然您可能“希望每个应用程序都能够向我的服务发送数据”,但用户可能不这样做,这就是为什么标准IPC可以通过权限进行保护的原因。startService()和bindService()将导致创建服务实例,甚至为您启动一个进程。您的服务将不会一直运行。所以,无论如何,您都需要startService()或bindService()。发布于 2019-03-28 14:07:20
AIDL:只有当您允许来自不同应用程序的客户端( multithreading )(来自不同应用程序的)访问您的IPC服务并希望在您的服务中处理时,才有必要使用AIDL。
绑定:如果您执行而不是,需要跨不同的应用程序执行并发 IPC,则应该通过实现Binder来创建接口。
信使:如果您想执行multithreading,,但是不需要,那么需要使用Messenger来实现您的接口。
https://stackoverflow.com/questions/38125066
复制相似问题