hyeals study
Rxjava를 안드로이드에 적용시켜보기! 본문
지난 포스팅에서는 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형태로 만들어준다.
각 버전의 정보는 아래 링크를 참고하면 된다.
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 |