greenrobot / EventBus

Event bus for Android and Java that simplifies communication between Activities, Fragments, Threads, Services, etc. Less code, better quality.
http://greenrobot.org/eventbus/
Apache License 2.0
24.67k stars 4.66k forks source link

The service cannot receive eventbus events. #703

Open libq opened 2 years ago

libq commented 2 years ago

MyService.java

@Override
public void onCreate() {
    super.onCreate();
    EventBus.getDefault().register(this);
}
@Override
public void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMyEvent(MyEvent event){
    Log.e(TAG,"onEvent");
}

MyFragment.java

EventBus.getDefault().post(new MyEvent());


manifast.xml

<application
    android:name="com.xxxx"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:usesCleartextTraffic="true"
    tools:ignore="GoogleAppIndexingWarning,UnusedAttribute">
  <service android:name=".MyService" />

======================================================= ps1: MyFragment send the event after MyService started. ps2: EventBus version : 3.1.1 android minSdkVersion 14 android targetSdkVersion 28

greenrobot-team commented 2 years ago

As the service listens on the main thread to the event, the event might get queued on the main thread event queue and not be delivered before the service is destroyed? And in general: does your code make sure the service is between the created and destroyed state?

Anyhow, this programming question is probably something to ask on Stack Overflow.