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.
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.
Peki RxAndroid’le tam olarak neler yapabiliriz?
Ü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.
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. 🙂
Referanslar:
- http://developer.android.com/preview/j8-jack.html
- http://droidcon.com/
- https://skillsmatter.com/conferences/6712-droidcon-2015
- https://medium.com/google-developers/developing-for-android-introduction-5345b451567c#.nbwgkioul
- https://photos.google.com/share/AF1QipMRnZL6gNbS06fnBNtKffRm9HBaxW8iP6w0L1T4nZYLI6s3wi_l8daT6mq4nwPf-w?key=LThZNmFXUUtmNi04bWlEYmVfcWdPenlvaDdCRU13
- http://tools.android.com/tech-docs/jackandjill
- http://reactivex.io/intro.html
- https://github.com/ReactiveX/RxJava/wiki
- https://github.com/ReactiveX/RxAndroid
- https://github.com/JakeWharton/RxBinding
- https://kotlinlang.org/docs/tutorials/kotlin-android.html
- https://en.wikipedia.org/wiki/Kotlin_(programming_language)
- https://kotlinlang.org/
- http://developer.android.com/tools/building/configuring-gradle.html
- http://gradle.org/
- https://docs.gradle.org
- https://developers.google.com/maps/documentation/utilities/polylinealgorithm
- https://developers.google.com/maps/documentation/android-api/utility/?hl=en
Emeğinize sağlık. Teşekkürler…