android - 如何在 Intent 服务中接收事件(Greenrobots 事件总线)

标签 android intentservice greenrobot-eventbus

我正在尝试在 IntentService 中接收粘性事件。我 try catch onEvent()onEventBackgroundThread() 中的事件,但没有收到事件。我知道如何在 Activity 和 fragment 之间发送和接收事件,但无法将事件发送到服务工作。 eventbus 是否发布到服务?如果有的话在哪里订阅事件?我尝试在 onHandleIntent(Intent Intent) 和服务的构造函数中进行订阅。没有运气。有人可以帮忙吗?

最佳答案

服务和 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);
}

你的 fragment 看起来像这样:

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

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

关于android - 如何在 Intent 服务中接收事件(Greenrobots 事件总线),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28493772/

相关文章:

android - 同一类的多个粘性对象?

android - 无法解决编译 “org.java-websocket:java-websocket:1.3.2”

java - Gradle assembleRelease 不适用于 ProGuard

android - 使用bindService启动IntentService时是否应该调用onHandleIntent?

android - 如果我的 Intent 服务会被破坏

java - 有没有一种方法可以在服务和 Activity 之间传递数据而不启动后者?

java - 这是没有 get/set 的 Retrofit POJO 的正确方法吗?

java - 将 EditText 设置为单行使其在按 enter 后失去焦点

android - fragment : No subscribers registered for event class 中的 GreenRobot EventBus 错误

java - GreenRobot异常: de. greenrobot.event.EventBusException:调用订阅者失败