13 Ekim 2017 Cuma

Temel RxJava (1)

RxJava Nedir ?

RxJava (Reactive Extension) en temelde observable pattern üzerine kurulu asenkron işlemler için kullanılan güçlü bir kütüphanedir . Kendi içinde 3 parçaya ayrılır .

Observable (Gözlenen) - Observer (Gözlemci) - Datayı işleyen methodlar 

Observable = Datanın yayınlandığı yer
Observer = Datanın dinlendiği yer
Datayı İşleme = Data üzerinde filtreleme , ekleme , çıkarma vs.. işlemlerin yapıldığı yer

Observable.just(" Hello World ").map(new Function() {
            @Override
            public String apply(String s) throws Exception {
                return s.trim();
            }
        }).subscribe(new Consumer() {
            @Override
            public void accept(String s) throws Exception {
                Log.d("", s);
            }
        });


Ekran Çıktısı : HelloWorld

Yukarıdaki örnekte en basit haliyle bir örnek görebilirisiniz . "Hello World" yaylınlanıyor -> trim() ile filtreleniyor -> subscribe edilen yerde sonuç görüntüleniyor .

Neden RxJava Kullanmalıyım ?

Yukarıdaki örnekte bir string yayınlanmış onu da bir yerden dinlemiş basmışsın , bunun için mi yani bu rxjava diyebilirsiniz :) haklısınız . Peki ama neden neden kullanmalıyım diye sorarsanız !

(Java)


 new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                final List strings = new ArrayList<>();
                strings.add("Hello");

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this, strings.toString(), Toast.LENGTH_SHORT).show();
                    }
                });


            }
        }).start();

Yapmak istediğim çok basit , bana bir liste dönecek olan bir işlem ama 500 milisaniyelik bir gecikme ile cevap veriyor . Cihazda UI kitlemeden arkaplanda bir işlem yapacağınızı düşünün ki bunu yapmak için yeni bir thread açmanız gerekiyor -Örnek amaçlı ben sonucu liste dönen bir işleme Thread.sleep(500) ile bir gecikme ekledim -. Ardından sonucu ekrana basacığınızı düşünün ki bunun içinde tekrar UI thread e geçmeniz yani bir runOnUiThread başlatmanız gerekiyor -Aksi takdirde exception alırsınız -.

Bunun yerine

(RxJava)

Observable.fromCallable(new Callable>() {
            @Override
            public List call() throws Exception {

                Thread.sleep(500);

                List strings = new ArrayList<>();
                strings.add("Hello");

                return strings;
            }
        }).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer>() {
            @Override
            public void accept(List strings) throws Exception {
                Toast.makeText(MainActivity.this, strings.toString(), Toast.LENGTH_SHORT).show();
            }
        });


ObserveOn = Subsriber hangi threadde çalışması dinlemesi gerektiğini belirtiyoruz . -AndroidSchedulers.mainThread() yani main threadde dinle . -
SubscribeOn = Observable sonucu yayınlanacak olacak işlemin hangi threadde çalışması gerektiğini belirtiyoruz . -Ben newThread() kullandım ama Schedulers.io da aynı işi yapıyor sadece var olan ama boşa çıkmış threadlerden birini kullanıyor .-

Bunlara ek olarak RxJava ile data üzerinde işlem yapabileceğiniz çok güçlü bir method set (Operators) olduğunu hesaba katarsak . RxJava geleneksel java koduna göre daha baskın geliyor .


Makalenin devamını linkten bulabilirisniz

0 yorum:

Yorum Gönder