Java
AOS - Rxjava3 , Single , Disposable
JunsC
2024. 6. 23. 16:46
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 건드리는 부분은 보통 메인 스레드에서 담당하고 있기 때문이다