3

バス経由でイベントを送信するために otto を使用していると想像してください。同じバス イベントをリッスンできる別のプロセスで実行される別のサービスをセットアップすることは可能ですか?

バスイベントが他のプロセスに配信されないのは別のJVMだと思います。問題はオットーにあります。スクエアが複数のプロセスやブロードキャストレシーバーなどを通過できるインテントを使用しているかどうかはわかりません。誰かが確認できますか?

基本的に、イベントをバスにプッシュするプロセス 1 があり、プロセス 2 にそのイベントをサブスクライブするメソッド/クラスがあるとします。プロセス 2 はイベントを受け取ることができますか?

4

2 に答える 2

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());
于 2017-04-22T19:31:24.680 に答える
-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"
     />

また、そのアーキテクチャを正しく理解していれば、イベントを別のスレッドにディスパッチしようとさえしません。投稿する前に正しいスレッドに座るという負担が送信者にかかります。

本当にその設計に固執する必要がある場合は、ターゲットの宛先と同じプロセスにプロキシ サービスを配置し、通常の IPC メカニズムを介して「リモート」サービスからプロキシにイベントを送信することをお勧めします。単純なものにはやり過ぎかもしれませんが、それが私が行く方法です

私はまだ学習曲線を進めているので、決定的な答えを出すつもりはありません。Otto を使用して、アクティビティ/サービスにメッセージを送受信する専用プロセスに壁紙サービスを配置したいと考えています。

于 2015-03-23T01:26:11.550 に答える