RxJava Nedir?

Tuğçe Aras
4 min readNov 18, 2022

--

Selamlar 👋, Şimdiki konumuz RxJava. Ne olduğu, nasıl kullanılması gerektiği,.. gibi konulardan bahsedeceğim. Başlayalım o zaman.

Kullanıcı deneyiminin daha iyi sağlanabilmesi adına, arka planda yapılan işlerin önyüzü etkilememesi için kullanılmaktadır.

🔹 RxJava Nedir?

RxJava(Reactive Extension Java), asenkron işlemlerde kullanılan bir kütüphanedir.

Asenkron: İş parçacıklarının birbirlerini etkilemeden aynı anda çalışmasıdır.

url : https://nightlies.apache.org/flink/flink-docs-release-1.16/fig/async_io.svg

Temelde 3 yapıdan oluşmaktadır. Bunlar:

  • Observable
  • Observer
  • Operator

Sırasıyla incelemeye başlayalım.

1) Observable

🔹 Veriyi yayınlayan, dışarıya aktaran yapıdır. Birden fazla kez dinleyici tetiklendiği zaman kullanılır. Observable dinleyici olarak Observer’ı kullanır. 4 metodu bulunmaktadır. Bunlar:

  • onComplete()
  • onSubscribe()
  • onError()
  • onNext()

onComplete() -> Observable’ın yaşam döngüsünün başarılı bir şekilde tamamlandığını ifade eder. Veri akşının sonlandığını bildirir.

onSubscribe() -> Veri akışına abone olmayı sağlar.

onError() -> Veri akışı içerisinde bir hata oluştuğunda bu hataların bildirilmesini sağlar.

onNext() -> Yayınlanan verilerin alınıp, işlenmesini sağlar.

Dinleme işlemi başladığı anda onSubscribe() meodu çalışmaya başlar. Sonrasında Observable’nın gönderdiği veriler onNext() metodundan geçer. En son veri de bu metottan geçtikten sonra işlem biter ve onComplete() metoduna geçilir. Bu işlemler sırasında bir hata meydana gelirse onError() metodu çağrılır.

RxJava’da bulunan farklı Observable türlerine bakacak olursak:

  • Observable
  • Flowable
  • Single
  • Completable
  • Maybe

✔️ Observable : Başta da anlattığım gibi veri akışını sağlar. Socket işlemlerinde kullanılan bir yapıdır. Dinleyici olarak Observer’ı kullanıyor demiştik. Aşağıdaki gibi Observable’ı dinleyen bir Observer oluşturulabilir.

✔️ Flowable : Observable ile benzer bir yapıya sahiptir. Fazla veri geldiği zaman taşmaları önlemek adına kullanılan bir yapıdır. Observable tarafında beklenen veriden daha fazlası geldiği taktirde Observer bununla başa çıkamaz. Bu durumda Observable’ın bazı verileri atlaması gerekir. Aki taktirde exception atar. Bunun için “backpressure strategy” i kullanır.

backpressure strategy : Ne kadar verinin üretilmesi gerektiği ile ilgili geri bildirim veren mekanizmadır. Farklı parametreleri bulunmaktadır. Bunlar:

BackpressureStrategy.BUFFER

BackpressureStrategy.DROP

BackpressureStrategy.LATEST

BackpressureStrategy.ERROR

BackpressureStrategy.MISSING

Flowable için kullanılan dinleyici Observable ile aynıdır.

✔️ Single : Alınması gereken tek bir değer olduğunda kullanılan bir yapıdır. Api isteklerinde kullanılır. Dinleyici olarak SingleObserver kullanır.

✔️ Completable : Single ile benzer bir yapıya sahipmiş gibi görünse de durum böyle değildir. Completable, işin bitip bitmediği ile ilgilenir. Observable’dan herhangi bir değer beklemez. Dinleyici olarak CompletableObserver kullanır.

✔️ Maybe : Single ile Completable’ın birleşimi gibidir. Single gibi tek bir değer dönmek için kullanılır. Ancak Single’dan farkı ya tek bir sonuç döner ya da hiç sonuç dönmeyebilir. Dinleyici olarak MaybeObserver kullanır.

2) Observer

🔹 Verinin dinlendiği yerdir. Veri akışında değişik bir şey olduğunda bilgilendirilir. Dinleme işlemi farklı thread’ler de gerçekleştirilebilir. Observer, Observable’ı dinleyerek Observable’a aktarılan verileri alır. Observer’ın bu akışı dinlemesi durumuna “subscription” denmektedir.

subscription: Observable ile Observer arasındaki bağlantıyı sağlar.

RxJava’ da farklı Observer türleri bulunmaktadır. (Observable kısmında değinmiştik) Bunlar:

  • Observer
  • SingleObserver
  • MaybeObserver
  • CompletableObserver

3) Operator

🔹 Operator, Observable’dan yayılan ve Observer’ın dinlediği verilerin işlenmesini sağlayan fonksiyonlardır. Verileri çeşitli işlemlerden geçirebilmeyi sağlamaktadır. (Filtreleme, gruplama,..)

Birkaç operatöre bakacak olursak:

  • map(): Observable’dan yayılan değerlerin işleme girmesini sağlar.
  • flatMap(): map operatörü gibi çalışır. Farkı; bir Observable sonucu oluşan değer, başka bir Observable’a bağlanıyorsa bu fonksiyon kullanılır. (İç içe Observable yazmamıza gerek kalmaz.)
  • zip(): Bir işlev aracılığı ile birden çok Observable değerini birleştirir.
  • filter(): Ayarlanan koşula göre değerleri filtreler.
  • repeate(): Belirli bir değeri ya da değer dizisini tekrar tekrar yayan bir Observable oluşturur.

Operatörler elbette bu kadarla sınırlı değil. Daha fazlasını öğrenmek istiyorsanız ya da merak ediyorsanız aşağıdaki linkten erişebilirsiniz.

👉 https://reactivex.io/documentation/operators.html

url : https://blog.mindorks.com/understanding-types-of-observables-in-rxjava-6c3a2d0819c8

Schedulers Nedir?

İşlemlerin yapıldığı yerdir. İşlem tipine göre ortamlar belirlenir. Schedulers’ı observeOn() ya da subscribeOn() ile kullanılmaktadır.

observeOn() -> Verinin hangi thread’de dinleneceğini belirttiğimiz yerdir.

subscribeOn() -> Observable’daki verinin hangi thread’de işlem göreceği belirtilir.

Schedulers türlerine bakacak olursak:

  • Schedulers.io(): Dosya okuma-yazma, network işlemleri gibi durumlarda kullanılır. Bu Schedulers çeşidi sınırsız sayıda çalışan iş parçacığı oluşturabileceği için OutOfMemoryError’ e neden olabilmektedir.
  • Schedulers.computation(): Yüksek CPU gerektiren işlemler için kullanılır. IO Schedulers’a benzemektedir. Ancak farkı iş parçacığı, cihazın çekirdek sayısına göre belirlenmektedir.
  • Schedulers.newThread(): Observable için yeni bir thread oluşturur. Uzun süren işlemlerin arka planda gerçekleşmesini sağlamak için kullanılır.
  • Schedulers.single(): Tek bir thread üretir ve ne kadar Observable ile ilgili işlem olursa olsun sadece tek bir Observable işlemini çalıştırır.
  • Schedulers.trampoline(): Yeni bir thread oluşturmaz. Birden fazla Observable’ın sırasıyla yürütülmesi istenildiği zaman kullanılır.
  • Schedulers.from(executor): Özel bir IO Scheduler olarak bilinmektedir. İşlem sayısı IO Scheduler’a göre fazla olduğu durumlarda kullanılır.
  • Andorid Schedulers: Arka planda yapılan işlemin sonucunu UI thread’e aktarmak için kullanılır. Genellikle observeOn() metodu ile birlikte kullanılmaktadır.

Kaynakça

gif url: The End Win GIF — Find & Share on GIPHY (2022). Available at: https://giphy.com/gifs/clickfunnels-russell-brunson-sales-funnels-5UKlxhmcxiEoN2gHCq

--

--

Tuğçe Aras
Tuğçe Aras

Written by Tuğçe Aras

Android Developer at Şekerbank T.A.Ş. 💻💚 | https://bio.link/tugcearas

No responses yet