An event bus in 27 LOC.
object RxBus {
private val mBusSubject = SerializedSubject(BehaviorSubject.create<Any>())
lateinit var uiScheduler: Scheduler
operator fun invoke(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) })
fun post(event: Any) = mBusSubject.onNext(event)
}
- Create your event class eg
class Event
-
Instantiate RxBus in
onCreate
of 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!!!