2017-04-18 7 views
0

미리보기 미리보기 이미지를로드하고 이미지를 이미지로로드하려고합니다. 언제든지 이미지가로드되면 미리보기 이미지가 삭제되는지 확인하고 싶습니다.ReactiveX로 점진적 이미지 로딩

은하기 실시 예 고려해

  • 서열 1 프리뷰 이미지
  • 서열 2 채용 이미지 요청 인 요청
  • 서열 3 결합 서열을 인
  • 순서 (4)는 생성 된 이미지 렌더링 시퀀스

.

Example 1: 

1 ------P------- 
2 ---------H---- 

3 ------P--H---- 

4 ------*--*---- 


Example 2: 

1 ----H--------- 
2 --------P----- 

3 ----H|-------- 

4 ----*|-------- 

내가 지금까지 채용이 이미와 takeWhile를 사용하여로드되었는지 여부를 나타냅니다 상태 변수를 절약 함께 왔어요 유일한 해결책

, 그러나 이것은 일부 비 우아한 조작을 필요로하며, 또한 부작용을 포함한다.

올바른 수신 방법을 찾고 있습니다.

답변

4

당신은 상태를 저장하고 변수를 사용하지 않고 작업을 수행 할 수 있습니다

Observable<Bitmap> hiresObservable = getHiresObservable() 
     .share() 
Observable<Bitmap> previewObservable = getPreviewObservable() 
     .takeUntil(hiresObservable); 


Observable.merge(previewObservable, hiresObservable) 
     .subscribe(bitmap -> { 
      //do something with the bitmap 
     }); 

이 매우 유사한이 answer이다.

+0

은 완벽하게 작동합니다. 왜'share()'가 필요합니까? – Shahar

+0

그렇지 않으면 hiresObservable에 두 번 가입 할 것이므로 원하지 않는 Observable을 '멀티 캐스트'하여 여러 구독에 동일한 값이 표시 될 수 있으므로 실제로주의해야하고 다른 '멀티 캐스트'연산자를 사용하여 방지해야합니다 경주 (예를 들어, 캐시를 가지고 있다면), 여기 내 설명을 읽을 수 있습니다 : http://stackoverflow.com/a/42826568/3903847 – yosriz