2

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

4

2 回答 2

4

服务和 EventBus 并没有真正混合。IntentService 旨在在后台线程中执行某些操作 - 触发并忘记。服务可以在不同的进程中运行并使用不同的上下文。它们的通信方式非常专有,不适合 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());
}
于 2016-02-26T17:28:19.300 回答
0

您需要使用“registerSticky”注册您的服务来捕捉粘性事件

于 2015-03-25T12:41:32.860 回答