如何在Intent服务中接收事件(Greenrobots Event Bus)

时间:2015-02-13 06:30:51

标签: android intentservice greenrobot-eventbus

我正在尝试在IntentService中收到粘性事件。我尝试在onEvent()onEventBackgroundThread()中捕获事件但我没有收到事件。我知道如何在活动和片段之间发送和接收事件,无法将事件发送到服务工作。事件总线是否发布到服务?如果它在哪里订阅事件?我尝试在onHandleIntent(Intent intent)和服务的构造函数中订阅。没运气。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

服务和EventBus并没有真正混合。 IntentService旨在在后台线程中执行某些操作 - 触发并忘记。服务可以在不同的进程中运行,并使用不同的Context。他们沟通的方式非常专有,并且不适合像EventBus这样的外部框架。

我的建议是重新考虑对IntentService的需求并考虑使用http://greenrobot.org/eventbus/documentation/delivery-threads-threadmode/不同的传递方法,因此将您的UI中的事件发布到您的通信层中的经理,该经理将在后台线程上接收它,处理它,然后发布另一个带有结果的事件,UI将在主线程上监听。

所以你的经理看起来像这样:

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

答案 1 :(得分:0)

您需要使用'registerSticky'注册您的服务以捕获粘性事件