gpt4 book ai didi

Android IPC LocalSocket 与 Binder (AIDL)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:34 27 4
gpt4 key购买 nike

我希望每个应用都能向我的服务发送数据。因此我需要进程间通信。我能找到的每个页面都建议使用 Messenger、AIDL 或 Intents (BroadcastReceiver)。到目前为止,我可以通过构建一些测试应用程序发现 BroadcastReceiver 非常慢,如果在 while(true) 循环中使用多个线程发送消息,消息可能会在没有通知的情况下丢失。 AIDL 和 Messenger 不仅实现起来很复杂(需要服务, Binder ,......)而且可以提供奇怪的行为,例如当使用 AIDL 发送多线程导致 RemoteException(!!! FAILED BINDER TRANSACTION !!! )时使用 oneway 关键字。我想确保交货有保证。当应该保证交付时,甚至有理由使用 oneway 吗?

尽管如此,LocalSocket 似乎非常易于使用(不需要服务,就像 java 套接字一样工作)。客户端应用程序可以只打开一个 LocalSocket,连接到提供的地址,然后 while(true) outputstream.writeObject();

使用 LocalSocket 时是否有任何缺点,因为 android 开发者页面上说“一些应用程序试图使用传统的 Linux 技术(例如网络套接字和共享文件)来实现 IPC。我们强烈建议您改为使用 Android 系统功能来实现 IPC”但是确实如此对此不作进一步评论

最佳答案

Are there any downsides when using LocalSocket

  1. LocalSocket 在框架级别没有安全性。虽然您可能“希望每个应用都能够向我的服务发送数据”,但用户可能不会,这就是标准 IPC 可以通过权限进行保护的原因。

  2. startService()bindService() 将创建您的服务实例,如果需要处理要求。您的服务不会一直运行。因此,无论如何您都需要 startService()bindService()

关于Android IPC LocalSocket 与 Binder (AIDL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38125066/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com