【问题标题】:IPC in Android using GreenRobot eventbusAndroid 中使用 GreenRobot 事件总线的 IPC
【发布时间】:2014-04-20 22:44:42
【问题描述】:

我需要与远程服务通信,使用(greenrobot) EventBus. 不幸的是,它似乎不适用于 IPC。查看代码,我也没有看到解决方法。任何帮助将不胜感激!

额外问题 - 还有其他支持 IPC 的 EventBus(适用于 Android)吗?

【问题讨论】:

    标签: android greenrobot-eventbus


    【解决方案1】:

    我需要使用(greenrobot)EventBus 与远程服务进行通信。

    greenrobot 的 EventBus 的全部意义,就像 Square 的 Otto 和 LocalBroadcastManager,是使用 IPC。

    任何帮助将不胜感激!

    不要将 greenrobot 的 EventBus 用于 IPC。使用 Android 的多种 IPC 机制之一进行 IPC:

    • startActivity()
    • startActivityForResult()
    • startService()
    • bindService()
    • sendBroadcast() 及其变体(例如,sendOrderedBroadcast()
    • ContentProvider

    【讨论】:

    • 感谢您的回复。正如我所提到的,我正在使用“远程服务”,并且希望将一些数据传达给多个应用程序。目前,消费者应用程序正在轮询生产者(使用 AIDL);但我想让它异步。我是否采取了错误的方法?
    • @Raj:使用广播Intents 通知消费者应用程序发生变化。
    • 再次感谢!由于 Eventbus(greerobot)声称自己比 android 广播系统更好(请参阅他们的常见问题解答)-我想知道他们是否支持 IPC。看来他们不支持,所以我会回退到广播。
    【解决方案2】:

    有一个 IPC EventBus 选项允许您通过 IPC 发送事件。 https://github.com/NewtronLabs/IpcEventBus

    根据文档,获取事件所需要做的就是:

    public class Listener implements IIpcEventBusConnectionListener, IIpcEventBusObserver {
    
        public Listener() {
            String targetApp = "com.packagename";
            IIpcEventBusConnector connector =
                ConnectorFactory.getInstance().buildConnector(context, this, targetApp);
            connector.startConnection();
        }
    
        @Override
        public void onConnected(IIpcEventBusConnector connector) {
            connector.registerObserver(this);
        }
    
        @Override
        public void onEvent(IEventIpc event) {
            Log.d("ipceventbus", "Received event: " + event.getClass());
        }
    
        @Override
        public void onDisconnected(IIpcEventBusConnector connector) {
    
        }
    }
    

    另一方面,您将活动发布如下:

    IpcEventBus.getInstance().postEvent(new MyEvent());
    

    我创建了两个应用程序,它们能够相互发送事件。

    【讨论】:

      【解决方案3】:

      另一个更接近 EventBus 语法的库是 HermesEventBus。它同时支持 IPC(和进程内)。

      虽然它们应该只是从 EventBus 派生的,所以我们可以只注入 EventBus 对象(实际上是一个 HermesEventBus),而不必到处更新代码。 https://github.com/eleme/HermesEventBus

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多