RxBus2
RxBus2 copied to clipboard
Casting - one time problem with queueing
Following happens:
Case 1 - Correct
- unlock your screen and start the demo
Following TestEvent logs will be printed:
DemoActivity: Type: QUEUED BUS [ActualClass: TestEvent] (key=NONE), Event: TEST - BASE CLASS and QUEUED - TestEvent
// following 4 events are lost in the second test scenario
DemoActivity: Type: QUEUED BUS [ActualClass: TestSubEvent1] (key=NONE), Event: TEST - BASE CLASS and QUEUED - TestEvent
DemoActivity: Type: QUEUED BUS [ActualClass: TestSubEvent2] (key=NONE), Event: TEST - BASE CLASS and QUEUED - TestEvent
DemoActivity: Type: QUEUED BUS [ActualClass: TestSubEvent3] (key=NONE), Event: TEST - BASE CLASS and QUEUED - TestEvent
DemoActivity: Type: QUEUED BUS [ActualClass: TestSubEvent4] (key=NONE), Event: TEST - SUBCLASS4 and QUEUED - TestSubEvent4
DemoActivity: Type: SIMPLE BUS [ActualClass: TestEvent] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: SIMPLE BUS [ActualClass: TestSubEvent1] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: SIMPLE BUS [ActualClass: TestSubEvent2] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: SIMPLE BUS [ActualClass: TestSubEvent3] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: QUEUED BUS [ActualClass: TestEvent - from thread] (key=NONE), Event: TEST - BASE CLASS and QUEUED - TestEvent
DemoActivity: Type: QUEUED BUS [ActualClass: TestSubEvent1 - from thread] (key=NONE), Event: TEST - BASE CLASS and QUEUED - TestEvent
DemoActivity: Type: QUEUED BUS [ActualClass: TestSubEvent2 - from thread] (key=NONE), Event: TEST - BASE CLASS and QUEUED - TestEvent
DemoActivity: Type: QUEUED BUS [ActualClass: TestSubEvent3 - from thread] (key=NONE), Event: TEST - BASE CLASS and QUEUED - TestEvent
DemoActivity: Type: SIMPLE BUS [ActualClass: TestEvent - from thread] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: SIMPLE BUS [ActualClass: TestSubEvent1 - from thread] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: SIMPLE BUS [ActualClass: TestSubEvent2 - from thread] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: SIMPLE BUS [ActualClass: TestSubEvent3 - from thread] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: QUEUED BUS [ActualClass: TestSubEvent4 - from thread] (key=NONE), Event: TEST - SUBCLASS4 and QUEUED - TestSubEvent4
Case 2 - Incorrect
- lock your screen and start the app with the android studio start button
- wait 5 seconds, so that the TestEvents from the background are emitted as well
- unlock the screen to resume the demo app
Following is printed:
DemoActivity: Type: SIMPLE BUS [ActualClass: TestEvent] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: SIMPLE BUS [ActualClass: TestSubEvent1] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: SIMPLE BUS [ActualClass: TestSubEvent2] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: SIMPLE BUS [ActualClass: TestSubEvent3] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: SIMPLE BUS [ActualClass: TestEvent] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: SIMPLE BUS [ActualClass: TestEvent - from thread] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: SIMPLE BUS [ActualClass: TestSubEvent1 - from thread] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: SIMPLE BUS [ActualClass: TestSubEvent2 - from thread] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: SIMPLE BUS [ActualClass: TestSubEvent3 - from thread] (key=NONE), Event: TEST - BASE CLASS and not queued - TestEvent
DemoActivity: Type: QUEUED BUS [ActualClass: TestEvent] (key=NONE), Event: TEST - BASE CLASS and QUEUED - TestEvent
DemoActivity: Type: QUEUED BUS [ActualClass: TestEvent - from thread] (key=NONE), Event: TEST - BASE CLASS and QUEUED - TestEvent
DemoActivity: Type: QUEUED BUS [ActualClass: TestSubEvent1 - from thread] (key=NONE), Event: TEST - BASE CLASS and QUEUED - TestEvent
DemoActivity: Type: QUEUED BUS [ActualClass: TestSubEvent2 - from thread] (key=NONE), Event: TEST - BASE CLASS and QUEUED - TestEvent
DemoActivity: Type: QUEUED BUS [ActualClass: TestSubEvent3 - from thread] (key=NONE), Event: TEST - BASE CLASS and QUEUED - TestEvent
DemoActivity: Type: QUEUED BUS [ActualClass: TestSubEvent4] (key=NONE), Event: TEST - SUBCLASS4 and QUEUED - TestSubEvent4
DemoActivity: Type: QUEUED BUS [ActualClass: TestSubEvent4 - from thread] (key=NONE), Event: TEST - SUBCLASS4 and QUEUED - TestSubEvent4
Problem
Prerequisitions
- emit casted sub events
- emit it before activity is resumed
- queuing must be enabled
All casted events that were emitted BEFORE the activity was resumed for the first the time AND are casted got lost (in the example those are the 4 sub class events that are emitted in the activity on start). This ONLY happens if queuing is enabled. If they are not casted they are not lost, weird, because casting means, that the casted events are emitted, so for the bus, it should not make any difference if a sub class of TestEvent in a casted way or a TestEvent is send to the bus...
I currently don't see any reason why this is happening...