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
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!!!