본문 바로가기
Java

AOS - Rxjava3 , Single , Disposable

by JunsC 2024. 6. 23.
728x90

Single , Dispoasable 등 rxjava 비동기 관리 코드 정리하는 중 꼭 disposable 을 해야하는지 의문이였다..

자동으로 코드 완료 후 메모리 해제되는게 아닌가 싶었는데 

Flowable 은 아니더라.. 

 

Disposable d = Flowable.. 
d.dispose();

 

이렇게 처리를 해줘야 한다 다 사용했으면...

 

그래서 뭔가 비효율적이라 생각했고 Single 을 기준으로 기능이나 성능 등 정의를 확인해보니 알아서 메

모리 해제 해준다고 한다.

 

Single<Boolean> deletePerson = ApisCall.deletePerson(m_Id);
    deletePerson.subscribeOn(Schedulers.io())
            .observeOn(Schedulers.single())
            .subscribe(new DisposableSingleObserver<>() {
                @Override
                public void onSuccess(@NonNull Boolean aBoolean) {
                    Util.log("ApisCall", "[deletePerson success]");
                }

                @Override
                public void onError(@NonNull Throwable e) {
                    Util.logError("ApisCall", "[deletePerson Error]", e);

                }
            });
} catch (Exception e) {
    Util.logError(Util.UtilTAG, "[ApisCall.deletePerson(m_Id) Error]", e);
}

 

그래서 이렇게 해놓으면 io 백그라운드에서 single 스레드로 결과를 알려주고 알아서 메모리 해제 후 다시 또 재생할 수 있게 되었다.

 

원래는 

Disposable d = null;

if(d != null || !d.isDispose()) d.dispose()

d = ...
이렇게 코드를 해놧는데 

 

위의 코드처럼 하니 더욱 간결해졌다.

 

--------중요!!!!!!!!!!-------

 

그리고 observOn에 중요한게 하나 있는데 

 

subscribe 쪽에 UI를 건드리는 일부분이라도 있으면 single() 로 하면 에러가 난다

반드시 그땐 AndroidSchedulers.mainThread() 로 결과를 넘겨주어야 에러가 안난다

왜냐하면 UI 건드리는 부분은 보통 메인 스레드에서 담당하고 있기 때문이다 

 

 

'Java' 카테고리의 다른 글

AOS_ Release 모드일때 로그 없애기  (0) 2024.07.20
AOS - .py 파일 연동  (0) 2024.06.23
AOS_ AndroidStudio Github 연동  (0) 2024.03.05
AOS_ Webview 와 Jsp 상호작용  (0) 2024.03.04
AOS_ 버전 업데이트 관련 에러  (0) 2024.03.04
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."