アクティビティとサービス間の通信にgreenrobot EventBusを使用できますか? 質問する

アクティビティとサービス間の通信にgreenrobot EventBusを使用できますか? 質問する

イベントバスこのライブラリをアクティビティとサービスの通信に使用できますか?

私は自分のアプリでこれを次のように試しました:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    EventBus.getDefault().register(this);
    setContentView(R.layout.activity_music_player);
    Intent serviceIntent=new Intent(MusicPlayerActivityTest.this,MusicPlayerServiceTest.class);
    startService(serviceIntent);
    EventBus.getDefault().post(new SetSongList(songArraList, 0));
}
@Override
protected void onDestroy() {
    EventBus.getDefault().unregister(this);
    super.onDestroy();
}

そして私の奉仕の中onEvent

ベストアンサー1

送信者ではなく、加入者を登録する必要があります。

したがって、イベントを取得する予定がある場合は、アプリから登録/登録解除を削除します。その場合は、onEvent(AnyEvent イベント) メソッドを Application クラスに追加するだけです。

次に、 でサービスに EventBus を登録しonStart()、 で登録を解除しますonStop()

そうすればもっとうまくいくはずです。

アプリケーションで

public class MyApp extend Application {
  @Override
  public void onCreate() {
    super.onCreate();
    ...
    EventBus.getDefault().post(new SetSongList(songArraList, 0));
  }
}

またはアクティビティで

public class MyActivity extend Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    EventBus.getDefault().post(new SetSongList(songArraList, 0));
  }
}

そしてあなたの奉仕において

public class MyService extends Service {
  ...
  @Override
  public void onCreate() {
    super.onCreate();
    EventBus.getDefault().register(this);
  }

  @Override
  public void onDestroy() {
    EventBus.getDefault().unregister(this);
    super.onDestroy();
  }

  public void onEvent(SetSongList event){
    // do something with event
  }
  ...
}

おすすめ記事