Подтвердить что ты не робот

Могу ли я использовать событие EventBus для greenrobot для связи между Activity и Service?

Могу ли я использовать библиотеку EventBus в качестве Activity, касающуюся служебной связи?

Я попробовал это в своем приложении следующим образом:

@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.

4b9b3361

Ответ 1

Вам необходимо зарегистрировать Абонента, а не эмиттера.

Итак, удалите регистрацию/отмену регистрации из своего приложения, если вы ожидаете получить событие. Если это так, просто добавьте метод onEvent (AnyEvent event) в класс 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
  }
  ...
}