Event Bus’ı Rx Java ile Uygulamak-RxBus

Ravzanur Konuk
Ekmob Developer Studio
2 min readJan 26, 2020

--

Uygulamanızda farklı yaşam döngülerine sahip iki nesneyi/sınıfı veya farklı hiyerarşiye sahip ögeler arasında iletişim kurmanız gerekebilir. Bende bu yazımda sizlere RxBus kullanarak bu iletişimi kolaylıkla yapabileceğinize değineceğim.

Nedir bu RxBus ?

Kısaca özetlemek gerekirse, EventBus kalıbını RxJava ile uyguladığımızda buna RxBus diyoruz.

Nasıl Kullanırız ?

İlk olarak, RxJava’da konu bilgisine sahip olmalıyız. Bunun için RxJava sayfasını inceleyebilirsiniz.

Şimdi RxJava kullanarak RxBus’u nasıl oluşturabileceğimizi görelim.

İlk olarak gradle dosyamıza rx android ve java bağlantılarının ekliyoruz :

implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.10'

Ardından RxBus’ın sınıfımızı singleton olarak yani tek bir sınıf üzerinden kontrol etmemiz uygulamamızı rahatlatacağı için aşağıdaki yapıyı oluşturuyoruz :

object RxBus {
private val bus = SerializedSubject(PublishSubject.create<Any())

fun send(o: Any) {
bus.onNext(o)
}

fun toObserverable(): Observable<Any> = bus
}

Şimdi, RxBus’ın her yerden erişimine sahibiz.

Aşağıdaki gibi herhangi bir sınıftaki bir event’a abone olabiliriz :

var csGeneralSubject = rx.subscriptions.CompositeSubscription()csGeneralSubject.add(RxBus.toObserverable().subscribeOn(AndroidSchedulers.mainThread()).subscribe(object : rx.Subscriber<Any>() {
override fun onNext(t: Any?) {
when (t) {
}
}

override fun onCompleted() {
}

override fun onError(e: Throwable?) {
}
}))

Başka bir sınıftan veya aynı sınıftan bir event gönderebiliriz :

RxBus.send(GeneralSubject.CLICKED_SAVE)

Bu şekilde RxJava, RxBus ile EventBus kalıbımızı oluşturmuş bulunmaktayız.

Ayrıca haberdar olma işlemi bittiğinde gereksiz yere kodun ilgili event dan haberdar olmasını kesmek içinde onDestroy‘da unsubscribe etmeyi unutmayalım. Aksi halde gereksiz yere haberdar olmaya devam edecek ve bu durum uygulamanızın kilitlenme ve performans sorununa neden olabilecektir.

Kendi EventBus’unuzu RxJava ile uygulamanın ne kadar basit olduğunu sizlere anlatmaya çalıştım.Projelerinizde bileşenler arasında etkili bir iletişim kurmak istiyorsanız RxBus ‘ı mutlaka deneyimlemenizi öneririm. Bir sonraki yazımızda görüşmek üzere :)

--

--