android - 后台服务发布的事件没有订阅者

标签 android multithreading android-service greenrobot-eventbus greenrobot-eventbus-3.0

我从在非主线程中运行的服务发布 EventBus.getDefault().post(new SendPlayer(player)); :

<service
  android:name=".player.PlayerService"
  android:process=":player"
  android:enabled="true"
  android:exported="true">
</service>

我希望在我的 fragment 中收到:

@Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(SendPlayer event) {
  Log.w("mcheck", "onEvent");
}

但是,我收到消息:
D/EventBus:没有为事件类 yarh.com.tryexo.player.SendPlayer 注册订阅者

仅当我删除 android:process=":player" 时才会传递事件。

这是一个错误还是我误解了后台线程和主线程之间的发布事件流程?

最佳答案

process 属性使您的 PlayerService 在其自己的单独进程中运行,就像完全不同的应用程序一样。

这就像尝试从另一个完全不同的应用程序中触发一个应用程序中的事件。您将需要找到一种不同的方式来与您的服务进行通信,或者将所有需要通信的组件放置在同一进程中。

关于android - 后台服务发布的事件没有订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36688945/

相关文章:

android - 当用户开始使用android设备时如何启动后台服务?

android - Acer Iconia Tab A500 是否支持配件模式?

android - 标签 fragment 出现意外的命名空间前缀 "xmlns"

python - Python有没有类似Java的CountDownLatch的控制机制?

java - 新线程导致 ContextNotActiveException

android - 使用 AlarmManager 调用服务

android - 将 LocationManager 作为 Android 服务启动

java - 重新启动 Android 应用程序时出现 SQlite 错误

android - 如何获取 Chromium for Android 的源代码

java - 这是一个好的多线程服务器设计吗?