使用 ReactiveX 进行渐进式图像加载
Progressive image loading with ReactiveX
我正在尝试加载缩小尺寸的 preview 图片,然后是 hires 图片。我想确保如果有任何机会先加载 hires 图像,则丢弃 preview 图像。
考虑以下示例,其中:
- 序列 1 是预览图像请求
- 序列 2 是招聘图像请求
- 序列 3 是组合序列
- 序列 4 是生成的图像渲染序列
.
Example 1:
1 ------P-------
2 ---------H----
3 ------P--H----
4 ------*--*----
Example 2:
1 ----H---------
2 --------P-----
3 ----H|--------
4 ----*|--------
到目前为止我想出的唯一解决方案是保存一个状态变量,该变量表示是否已经加载了雇员并使用 takeWhile
,但这需要一些非优雅的操作并且还涉及侧面效果。
我正在寻找正确的 RX 方式。
你可以在不保存状态和使用变量的情况下做到这一点:
Observable<Bitmap> hiresObservable = getHiresObservable()
.share()
Observable<Bitmap> previewObservable = getPreviewObservable()
.takeUntil(hiresObservable);
Observable.merge(previewObservable, hiresObservable)
.subscribe(bitmap -> {
//do something with the bitmap
});
这与非常相似。
我正在尝试加载缩小尺寸的 preview 图片,然后是 hires 图片。我想确保如果有任何机会先加载 hires 图像,则丢弃 preview 图像。
考虑以下示例,其中:
- 序列 1 是预览图像请求
- 序列 2 是招聘图像请求
- 序列 3 是组合序列
- 序列 4 是生成的图像渲染序列
.
Example 1:
1 ------P-------
2 ---------H----
3 ------P--H----
4 ------*--*----
Example 2:
1 ----H---------
2 --------P-----
3 ----H|--------
4 ----*|--------
到目前为止我想出的唯一解决方案是保存一个状态变量,该变量表示是否已经加载了雇员并使用 takeWhile
,但这需要一些非优雅的操作并且还涉及侧面效果。
我正在寻找正确的 RX 方式。
你可以在不保存状态和使用变量的情况下做到这一点:
Observable<Bitmap> hiresObservable = getHiresObservable()
.share()
Observable<Bitmap> previewObservable = getPreviewObservable()
.takeUntil(hiresObservable);
Observable.merge(previewObservable, hiresObservable)
.subscribe(bitmap -> {
//do something with the bitmap
});
这与