其他过程可以看到公交活动吗?

时间:2015-03-15 23:51:03

标签: android process ipc square otto

想象一下,我使用otto通过总线发送事件。是否可以设置另一个在可以侦听相同总线事件的单独进程上运行的服务?

我认为,由于它是另一个JVM,因此总线事件将不会传递给其他进程。问题是otto我不确定square是否使用可以通过多个进程或广播接收器等的意图,有人可以确认吗?

基本上假设我有一个将事件推送到总线上的进程1,并且假设我在进程2中有一些订阅该事件的方法/类。流程2是否能够接收事件?

2 个答案:

答案 0 :(得分:1)

IPC EventBus是一种允许用户通过IPC发送事件的解决方案。

使用

将依赖项添加到build.gradle

compile 'com.newtronlabs.ipceventbus:ipceventbus:4.4.0'

实施接口以获取有关事件的报告。

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().getSimpleName());
    }

    @Override
    public void onDisconnected(IIpcEventBusConnector connector) 
    {

    }
}

发布你可以告诉我们:

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

答案 1 :(得分:-1)

不幸的是,我认为答案是肯定的。鉴于它是一个Guava分叉,感觉设计简单易用,我的猜测是它不会与IPC有任何关系。

来自Guava页面https://code.google.com/p/guava-libraries/wiki/EventBusExplained: " EventBus(...)专门用于使用显式注册替换传统的Java进程内事件分发。它不是通用的发布 - 订阅系统,也不是用于进程间通信。"

我还有一个项目,其中Otto用于从IntentService向Activity发送消息。如果我改变了IntentService,那么它就有一个专门的进程,就会神奇地停止工作。我添加时可以看到差异:

<service android:name=".service.image.DownloadIntentService"  
    android:process=":myServiceProcess"
     />

此外,如果我正确理解其架构,它甚至不会尝试将事件分派给不同的线程。它会在发布之前将发送者的负担置于正确的线程上。

如果您真的不得不坚持这种设计,我建议您可以在与目标目的地相同的过程中使用代理服务,并从&#34; remote&#34;发送事件。通过通常的IPC机制为您的代理服务?对于简单的事情来说可能有些过分,但这就是我的方式

我不打算得到明确的答案,因为我还在学习曲线上。我喜欢让我的壁纸服务坐在一个专门的过程中,使用Otto向我的活动/服务发送和接收消息。