관리 메뉴

hyeals study

Rxjava를 안드로이드에 적용시켜보기! 본문

안드로이드

Rxjava를 안드로이드에 적용시켜보기!

hyeals 2021. 2. 8. 20:01

지난 포스팅에서는 Rxjava에서 데이터를 발행 및 구독하는 방법을 알아봤다.

Rxjava를 안드로이드에 적용시키기 위해서 지금까지 공부했기 때문에 한 번 안드로이드 스튜디오를 이용해서 Rxjava를 안드로이드에 적용시켜서 실행할 계획이다!

 

일단 Rxjava를 안드로이드 스튜디오에서 사용하기 위해서는

build.gradle(:app)에 dependencies에 몇 가지를 추가해줘야 한다.

 

   //RxAndroid와 RxJava , RxKotlin 추가
    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
    implementation 'io.reactivex.rxjava3:rxjava:3.0.6'
    implementation 'io.reactivex.rxjava3:rxkotlin:3.0.0'

    // 필요한 API를 찾아서 추가
    implementation 'com.jakewharton.rxbinding4:rxbinding:4.0.0'

 

이정도를 추가했는데 각각을 설명해보자면

 

1. Rxandroid: RxJava에 안드로이드용 스케쥴러 등 몇 가지 클래스를 추가해서 안드로이드 개발을 쉽게 해주는 라이브러리다. (+ 안드로이드의 스레드와 Rxjava에서 사용하는 스케쥴러를 연결해준다?

2. Rxjava 및 RxKotlin: Rxjava를 사용하려면 기본적으로 필요!  

3. Rxbinding: 안드로이드에서 editText와 같은 뷰 컴포넌트들을 손쉽게 Observable형태로 만들어준다.

 

각 버전의 정보는 아래 링크를 참고하면 된다.

github.com/ReactiveX/RxJava

 

ReactiveX/RxJava

RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM. - ReactiveX/RxJava

github.com


* activity_main.xml에 id=textView라는 textView를 정의해놓았다.

 

이제 MainActivity.java에 RxJava를 사용한 코드를 작성해봤다.

package com.example.rxjavatest;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.observers.DisposableObserver;
import io.reactivex.rxjava3.schedulers.Schedulers;


public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Observable<String> observable = Observable.create(emitter -> {
            emitter.onNext(Thread.currentThread().getName() + "\n: RxJava Observer Test");
            emitter.onComplete();
            }
        );

        observable.subscribe(observer); // main스레드에서 실행

    }

    DisposableObserver<String> observer = new DisposableObserver<String>() {
        @Override
        public void onNext(@NonNull String s) {
            TextView rxjava_text = findViewById(R.id.textView);
            rxjava_text.setText(s);
        }

        @Override
        public void onError(@NonNull Throwable e) {
            Log.d("TEST", "Observer Error...");
        }

        @Override
        public void onComplete() {
            Log.d("TEST", "Observer Complete!");
        }
    };
}

 

-이렇게 작성하면 위의 코드는 메인 스레드에서 실행이 된다. 실제로 실행시켜보면 아래와 같은 결과를 보여준다.

 


* 다른 스레드에서 처리하고 싶다면 아래와 같이 변경해주면 된다.

 

package com.example.rxjavatest;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.observers.DisposableObserver;
import io.reactivex.rxjava3.schedulers.Schedulers;


public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Observable<String> observable = Observable.create(emitter -> {
            emitter.onNext(Thread.currentThread().getName() + "\n: RxJava Observer Test");
            emitter.onComplete();
            }
        );

        observable.subscribeOn(Schedulers.io()).subscribe(observer); // io스레드에서 실행

    }

    DisposableObserver<String> observer = new DisposableObserver<String>() {
        @Override
        public void onNext(@NonNull String s) {
            TextView rxjava_text = findViewById(R.id.textView);
            rxjava_text.setText(s);
        }

        @Override
        public void onError(@NonNull Throwable e) {
            Log.d("TEST", "Observer Error...");
        }

        @Override
        public void onComplete() {
            Log.d("TEST", "Observer Complete!");
        }
    };
}

 

- 위 코드의 결과는 아래와 같으며, RxCachedThreadScheduler-1이라는 스레드에서 실행됨을 확인할 수 있다.

 

 

아마 실제로는 더 훨씬 복잡하게 코드를 짤거다.. ㅜ

'안드로이드' 카테고리의 다른 글

구글 TTS API를 안드로이드에서 써보기!(2??)  (1) 2021.02.14
구글 TTS API를 안드로이드에서 써보기!  (1) 2021.02.10
RxJava 사용해보기  (0) 2021.02.07
RxJava???  (0) 2021.02.06
웹툰 바로가기 앱  (0) 2020.05.24
Comments