Observable.fromCallable() 는 RxJava에서 비동기 작업을 수행할 때 사용하는 메서드 중 하나로, 주어진 Callable 인터페이스를 이용해 특정 작업을 수행하고, 그 결과를 Observable로 만들어준다.
private Observable<String> performTask() {
return Observable.fromCallable(new Callable<String>() {
@Override
public String call() throws Exception {
return "";
}
});
}
// 람다식
private Observable<String> performTask() {
return Observable.fromCallable(() -> {
return "";
});
}
fromCallable 메서드는 Callable 객체를 받아서, 해당 작업을 수행한 후 반환값을 Observable로 생성한다.
Callable은 제네릭 타입을 사용해 반환할 데이터 타입을 지정할 수 있으며, 여기서는 String 타입을 반환하였다.
Callable 인터페이스에서 call() 메서드는 비동기로 실행할 작업을 정의하는 메서드이다.
CompositeDisposable 는 여러 개의 Disposable 객체를 모아 관리할 수 있는 컨테이너 역할을 하여, 특정 시점에 그룹에 포함된 모든 구독을 한 번에 해제할 수 있게 해준다.
public class MainActivity extends AppCompatActivity {
private CompositeDisposable disposables = new CompositeDisposable();
@Override
protected void onCreate(Bundle savedInstanceState) {
...
disposables.add(
performTask()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Throwable {
// 결과 처리
}
})
);
disposables.add(
Observable.just("Task")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
// 결과 처리
})
);
}
...
@Override
protected void onDestroy() {
super.onDestroy();
disposables.clear();
}
}
disposables.add() 를 통해 CompositeDisposable 에 구독을 추가한다.
disposables.clear() 를 통해 CompositeDisposable 에 추가된 모든 구독을 해제한다.
이를 통해 메모리 누수를 방지할 수 있다.