나는이 시나리오를 가지고 있습니다 : 꽤 빨리 항목을 생성하는 스트림 UI 스레드에서 많은 작업을하는 구독자입니다.RxJava - 다른 스트림을 기반으로 구독 취소 (다시)
특정 조건이 충족되면 추가 작업을 저장하지 않으려 고합니다.
다시 구독하는 경우 추가 작업을하고 싶습니다.
예 :네트워크 이벤트는 항목에 대한 업데이트를 생성하고 모델에서이를 수신하고 항목을 업데이트하며 업데이트 된 항목으로 새로운 관찰 가능 항목을 노출합니다. 화면이 모델의 스트림을 구독하고 그에 따라 GUI를 업데이트합니다. 새 화면이 위에 열리므로 이전 화면에서 더 이상 GUI를 업데이트 할 필요가 없습니다. - 모델을 계속 업데이트하지 않는 동안 (모델이 계속 업데이트되는 동안) 새 화면이 닫히면 이전 화면이 다시 볼 수있게됩니다. 다시 구독해야하며 시간을 들으므로 감상을 새로 고침해야합니다.
나는 몇 가지 솔루션을 가지고 있지만 아마 더 나은 하나가 기분이 : 나는 상태를 확인하기 위해 필터를 사용할 수 있습니다
. 그리고 그 항목들을 그냥 필터링하는 것보다 더 효율적일 것이므로 전체 구독을 선호합니다.
getItemsUpdateObs().filter(o -> isScreenVisible()).subscribe(...);
구독하고 상태 이벤트를 수신 대기하는 데 사용할 수 있습니다. 그때마다 새로운 구독을 통해 해당 이벤트에 따라 구독/구독 취소하십시오. 이것은 기능적인 것이 아닌 절차 적 솔루션입니다. 나는 창 연산자를 사용하여 그것을 평평하게 만들 것을 생각했지만, 이것은 솔직한 해결책이라고 확신하지 못합니다.
isScreenVisibleObs().subscribe(isVisible -> {
if (isVisible){
subscription = getItemsUpdateObs().subscribe(...)
} else {
if (subscription != null) subscription.unsubscribe()
}});
의견이 있으십니까?
나는이처럼하고 싶으면 :
지금까지 답변을 얻은 것 같아서 코드 예제를 추가했습니다. – ndori