Как получить событие в сервисе Intent (шина событий Greenrobots)

Я пытаюсь получить липкое событие в IntentService, Я пытался поймать события в onEvent()а также onEventBackgroundThread() но я не получаю события. Я знаю, как отправлять и получать события между действиями и фрагментами, которые не могут заставить отправлять события в службу для работы. Eventbus отправляет сообщение в сервис? Если это так, где подписаться на события? Я пытался подписаться в onHandleIntent(Intent intent) и в конструкторе службы. Неудачно. Может кто-нибудь, пожалуйста, помогите?

2 ответа

Сервисы и EventBus на самом деле не смешиваются. Служба IntentService предназначена для того, чтобы что-то делать в фоновом потоке - запустить и забыть. Службы могут работать в разных процессах и использовать разные контексты. То, как они общаются, очень запатентовано и плохо поддается внешним фреймворкам, таким как EventBus.

Мой совет заключается в том, чтобы пересмотреть необходимость использования IntentService и рассмотреть возможность использования http://greenrobot.org/eventbus/documentation/delivery-threads-threadmode/ различных методов доставки, поэтому опубликуйте событие из вашего пользовательского интерфейса для менеджера в вашем слое связи, который получит его в фоновом потоке, обработает и, в свою очередь, опубликует другое событие с результатами, которые пользовательский интерфейс будет прослушивать в основном потоке.

Итак, ваш менеджер выглядит примерно так:

@Subscribe(threadMode = ThreadMode.BackgroundThread)
public void onEvent(AccountsDoGetEvent event){
    //do long running task like going to network or database
    EventBus.getDefault().post(new AccountsUpdatedEvent);
}

и ваш фрагмент выглядит примерно так:

@Subscribe(threadMode = ThreadMode.MainThread)
public void onEvent(AccountsUpdatedEvent event){
    //update the UI
}

public void onButtonClicked(){
    EventBus.getDefault().post(new AccountsDoGetEvent());
}

Вам нужно зарегистрировать свой сервис с помощью 'registerSticky', чтобы перехватывать липкие события

Другие вопросы по тегам