androidottogreenrobot-eventbus

EventBus Producer has been invalidated and can no longer produce events


I am using RxBus which is an RxJava clone of Otto/EventBus to communicate between the different components of my android app. The app works fine on my Motorola Moto x 2013 running ICS, without crashes. But on a Nexus 5X, running Android M, it throws this exception:

Fatal Exception: java.lang.IllegalStateException: Exception thrown on Scheduler.Worker thread. Add `onError` handling.
   at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:60)
   at android.os.Handler.handleCallback(Handler.java:808)
   at android.os.Handler.dispatchMessage(Handler.java:103)
   at android.os.Looper.loop(Looper.java:193)
   at android.app.ActivityThread.main(ActivityThread.java:5333)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
   at dalvik.system.NativeStart.main(NativeStart.java)
Caused by rx.exceptions.OnErrorNotImplementedException: [EventProducer public xyz.chanl.radio.events.Events$StageProgram xyz.chanl.radio.fragments.ProgramListFragment.stageProgram()] has been invalidated and can no longer produce events.
   at rx.Observable$27.onError(Observable.java:8139)
   at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:157)
   at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:120)
   at rx.internal.operators.OperatorSubscribeOn$1$1.onError(OperatorSubscribeOn.java:59)
   at rx.Observable.unsafeSubscribe(Observable.java:8321)
   at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94)
   at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
   at android.os.Handler.handleCallback(Handler.java:808)
   at android.os.Handler.dispatchMessage(Handler.java:103)
   at android.os.Looper.loop(Looper.java:193)
   at android.app.ActivityThread.main(ActivityThread.java:5333)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
   at dalvik.system.NativeStart.main(NativeStart.java)
Caused by java.lang.IllegalStateException: [EventProducer public xyz.chanl.radio.events.Events$StageProgram xyz.chanl.radio.fragments.ProgramListFragment.stageProgram()] has been invalidated and can no longer produce events.
   at com.hwangjr.rxbus.entity.ProducerEvent.produceEvent(ProducerEvent.java:98)
   at com.hwangjr.rxbus.entity.ProducerEvent.access$000(ProducerEvent.java:17)
   at com.hwangjr.rxbus.entity.ProducerEvent$1.call(ProducerEvent.java:80)
   at com.hwangjr.rxbus.entity.ProducerEvent$1.call(ProducerEvent.java:76)
   at rx.Observable.unsafeSubscribe(Observable.java:8314)
   at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94)
   at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
   at android.os.Handler.handleCallback(Handler.java:808)
   at android.os.Handler.dispatchMessage(Handler.java:103)
   at android.os.Looper.loop(Looper.java:193)
   at android.app.ActivityThread.main(ActivityThread.java:5333)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
   at dalvik.system.NativeStart.main(NativeStart.java)

i have googled, but nobody seems to have had this issue before or i cant find an even remotely similar stacktrace.

How can i investigate this problem?

I register and unregister the bus in the onStart and onStop functions of the fragment.


Solution

  • So, I investigated and I realized this normally happens when you register multiple producers emitting the same event. So when the producer is registered with a particular event it invalidates the second one. I don't know if this design was intentional.