【发布时间】:2014-04-20 22:44:42
【问题描述】:
我需要与远程服务通信,使用(greenrobot) EventBus. 不幸的是,它似乎不适用于 IPC。查看代码,我也没有看到解决方法。任何帮助将不胜感激!
额外问题 - 还有其他支持 IPC 的 EventBus(适用于 Android)吗?
【问题讨论】:
标签: android greenrobot-eventbus
我需要与远程服务通信,使用(greenrobot) EventBus. 不幸的是,它似乎不适用于 IPC。查看代码,我也没有看到解决方法。任何帮助将不胜感激!
额外问题 - 还有其他支持 IPC 的 EventBus(适用于 Android)吗?
【问题讨论】:
标签: android greenrobot-eventbus
我需要使用(greenrobot)EventBus 与远程服务进行通信。
greenrobot 的 EventBus 的全部意义,就像 Square 的 Otto 和 LocalBroadcastManager,是不使用 IPC。
任何帮助将不胜感激!
不要将 greenrobot 的 EventBus 用于 IPC。使用 Android 的多种 IPC 机制之一进行 IPC:
startActivity()startActivityForResult()startService()bindService()sendBroadcast() 及其变体(例如,sendOrderedBroadcast())ContentProvider
【讨论】:
Intents 通知消费者应用程序发生变化。
有一个 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());
我创建了两个应用程序,它们能够相互发送事件。
【讨论】:
另一个更接近 EventBus 语法的库是 HermesEventBus。它同时支持 IPC(和进程内)。
虽然它们应该只是从 EventBus 派生的,所以我们可以只注入 EventBus 对象(实际上是一个 HermesEventBus),而不必到处更新代码。 https://github.com/eleme/HermesEventBus
【讨论】: