Android

Java 에서 RxJava 사용하기 (이벤트 수신)

Dean83 2022. 6. 22. 13:06

RxJava는 비동기로 동작하는 기능으로, 보통 코틀린에서 사용하는 예제들이 많이 나와있고

Java에서 사용하는 예제는 찾기가 어려웠다. 

 

특정 이벤트를 수신해야 하는데 순수 콜백으로는 잘 안받아져 RxJava를 이용해 보려 했다. 

예제는 폴드 기기에서 폴드상태값을 수신하는 이벤트이다.

1. gradle 항목 추가

implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.x.x'
implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'

implementation "androidx.window:window:1.1.0-alpha02"

// For Java-friendly APIs to register and unregister callbacks
implementation "androidx.window:window-java:1.1.0-alpha02"

// For RxJava2 integration
implementation "androidx.window:window-rxjava2:1.1.0-alpha02"

 

2. 맴버변수 추가 (메인 액티비티)

 private Disposable disposable = null;
 private Observable<WindowLayoutInfo> observable;

 

3. OnCreate 에 코드 추가

WindowInfoTracker windowInfoTracker = WindowInfoTracker.getOrCreate(메인액티비티클래스명.this);

// Create a new observable
observable = WindowInfoTrackerRx.windowLayoutInfoObservable(windowInfoTracker, 메인액티비티클래스명.this);

4. OnStart에 코드 추가

if (disposable != null) {
    disposable.dispose();
} else {
    //observeOn에 AndroidSchedulers.mainThread()를 넣을수도 있다. 
    disposable = observable.observeOn(Schedulers.io()).subscribe(windowLayoutInfo -> {

        ...
    });
}

5. OnStop에 코드 추가

if (disposable != null) {
    disposable.dispose();
}