An event bus in 27 LOC.
object RxBus {
privateval mBusSubject =SerializedSubject(BehaviorSubject.create<Any>())
lateinitvar uiScheduler:Scheduleroperatorfuninvoke(sch:Scheduler) { uiScheduler = sch }
fun <T> register(eventClass:Class<T>): Observable<T> = mBusSubject.filter({ event -> eventClass.isInstance(event) })
.observeOn(uiScheduler)
.onBackpressureBuffer()
.map<T>({ eventClass.cast(it) })
funpost(event:Any) = mBusSubject.onNext(event)
}- Create your event class eg
classEventInstantiate RxBus in
onCreateof your application class withRxBus(AndroidSchedulers.mainThread())Register the event and wait to consume them.
RxBus.register(Event::class.java)
.subscribe{ event ->// trigger something
}- Post an event with
RxBus.post(Event())- Be happy!!!