Merhaba bu yazı Android Temel Başlıklar v2 yazısının devamı niteliğindedir. Keyifli okumalar.

6- RxJava, RxAndroid

ReactiveX ilk olarak Microsoft tarafından yaratılmış bir library. Observable yaklaşımı kullanan async ve event-based programlar içindir. Temelde observable patternı kullanır.

RxJava da ReactiveX’in Java Virtual Machine için implementasyonu aslında. Java 6 ve üzerinde kullanabiliyoruz.

Peki neden kullanmalıyım dersek de aslında kullanımı basit tek bir jarla implement edilebiliyor. Polyglot bir implementasyon. Groovy, Ruby, Kotlin, Scala gibi JVM tabanlı dilleri destekliyor.

Screen Shot 2016-04-19 at 23.00.40

Basitçe nasıl bir yapısı vardır diye bakarsak, yukarıdaki örnekte bir liste var. Bunu filtreleyip, ekrana yazdırıyoruz. Bunu bu sırada gözlemleyebiliyoruz. Yani bu tabi dilin gücün gösteren bir örnek değil ama syntax’ anlamak için yeterli bir örnek.

Processing chain’de hangi methodlar vardır dersek de transformer olarak map, flattop, scan; filters olarak filter, trottle, take,ship; Condition olarak amb, shipwhile, takewhile; combination olarak concat, zip, combineLatest; Aggregate olarak da count, reduce, toList, toMap. Şimdi temel olarak RxJava gözümüzde canlandı.

RxAndroid ise, Java ama plain Java değil. Daha çok UI. RxAndroid aslında RxJava’nın android için özelleşmiş şekli gibi düşünebiliriz. Android’de reactive componentleri daha basit ce kolay şekilde yazabilmek için var. Android Studio’da gradle dosyasında dependency’leri aşağıda görüldüğü gibi 2 satır kodu ekleyerek kullanmaya başlayabiliyoruz. Onun altında ise konsoldan nasıl çalıştığı görülebilir.

Screen Shot 2016-04-19 at 23.09.38

Peki RxAndroid’le tam olarak neler yapabiliriz?

Screen Shot 2016-04-19 at 23.10.40

Üstteki imajda görülen stardart bir button ve click listenerı. Tıklandığında bir method çağrılıyor. Alttaki imajdaki için reactive implementasyonu. Aşağıdaki örnekte click listenerı dinlemeye başladık. Ancak gözlemleme işleminin başlaması için subscribe da edilmesi gerekli. Bir alttaki kutu içerisinde ise bunu görüyoruz.

Bu bize ne sağladı dersek, mesela araya delay koyabilirdik. İşlemi artık main thread’de yapmıyoruz. Triggeraction’ın main thread’de yapılmaması gereken, mesela bir mail gönderim işlemi olabilir, bir işlem olduğunu düşünelim. Bunu RxAndroid gibi bir lib kullanmadan yaptığımızda bizim async task ya da worker thread kullanmamız gerekirdi aslında. Bizim yapacağımız işlemi kendisi yapmış oluyor.

Bu mesela örneğin native bir login sayfasında, birden çok edittext alanı dinleip hepsi validse işleme devam et demek için kullanılabilirdi.

Screen Shot 2016-04-19 at 23.11.47

Az önceki örnekte, button Android’in kendi butonuydu. Biz sadece observe ettik ama mesela çok daha basit bir şekilde RxBinding’i kullanarak yapabilirdik. Çok fazla view’in Rx versiyonu hali hazırda yazılmış durumda.

Umarım genel bir fikir oluşmasında faydalı olmuştur. 🙂

Screen Shot 2016-04-19 at 23.17.19

Referanslar: