【发布时间】:2016-11-02 15:57:24
【问题描述】:
我希望每个应用都能够向我的服务发送数据。因此我需要进程间通信。我能找到的每个页面都建议使用 Messenger、AIDL 或 Intents (BroadcastReceiver)。到目前为止,我可以通过构建一些测试应用程序发现,BroadcastReceiver 非常慢,如果在while(true) 循环中使用多个线程发送消息,消息可能会在没有通知的情况下丢失。 AIDL 和 Messenger 不仅实现起来很复杂(需要服务、活页夹等),而且可能会提供奇怪的行为,例如,当使用多个线程发送时导致 RemoteException (!!! FAILED BINDER TRANSACTION !!! ) 与 AIDL使用 oneway 关键字。我想确保交货得到保证。在应该保证交付时甚至有理由使用oneway?
尽管如此,LocalSocket 似乎非常易于使用(不需要服务,就像 java 套接字一样工作)。客户端应用程序可以只打开一个 LocalSocket,连接到提供的地址,然后 while(true) outputstream.writeObject();
使用 LocalSocket 时是否有任何缺点,因为 android 开发者页面显示“某些应用程序尝试使用传统的 Linux 技术(例如网络套接字和共享文件)来实现 IPC。我们强烈建议您改用 Android 系统功能来实现 IPC”,但确实如此对此不做进一步评论
【问题讨论】:
标签: android multithreading ipc aidl android-binder