问题中的线索是:“假设我有一个提取器,它从一个独立线程上的给定链接中提取一个图像。然后图像将被缓存在内存中。”
答案是cache()
运算符:
记住由可观察者发出的项目序列,并向未来的订户发出相同的序列
因此,无论订阅者
如何订阅映像,以下可观察的
应该只获取映像一次:
Observable<Bitmap> cachedBitmap = fetchBitmapFrom(url).cache();
编辑:
我认为下面的示例证明了上游Observable
只订阅了一次,即使在Observable
发出任何内容之前有多个订阅。对于网络请求也应该如此。
package com.example;
import rx.Observable;
import rx.Subscriber;
import rx.schedulers.Schedulers;
public class SimpleCacheTest {
public static void main(String[] args) {
final Observable<Integer> cachedSomething = getSomething().cache();
System.out.println("before first subscription");
cachedSomething.subscribe(new SimpleLoggingSubscriber<Integer>("1"));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("before second subscription");
cachedSomething.subscribe(new SimpleLoggingSubscriber<Integer>("2"));
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("quit");
}
private static class SimpleLoggingSubscriber<T> extends Subscriber<T> {
private final String tag;
public SimpleLoggingSubscriber(final String tag) {
this.tag = tag;
}
@Override
public void onCompleted() {
System.out.println("onCompleted (" + tag + ")");
}
@Override
public void onError(Throwable e) {
System.out.println("onError (" + tag + ")");
}
@Override
public void onNext(T t) {
System.out.println("onNext (" + tag + "): " + t);
}
}
private static Observable<Integer> getSomething() {
return Observable.create(new Observable.OnSubscribe<Integer>(){
@Override
public void call(Subscriber<? super Integer> subscriber) {
System.out.println("going to sleep now...");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
subscriber.onNext(1);
subscriber.onCompleted();
}
}).subscribeOn(Schedulers.io());
}
}
before first subscription
going to sleep now...
before second subscription
onNext (1): 1
onNext (2): 1
onCompleted (1)
onCompleted (2)
quit
我有一个Java web应用程序,使用SPRING进行REST调用。 我想控制应用程序为请求打开的线程数。 所以我添加了线程配置: 我使用的同步服务不是异步的,我对它进行了测试,它没有限制处理请求的线程,而是同时处理所有请求。 我所期望的是,当我一次发送两个请求时,要么抛出第二个请求,要么等待第一个请求完成。 我根本没有在我的应用程序中实现Thread。这是我的控制器的相关代码: 这是控制台结果:
相册管理 一、相册管理:指对所有上传的图片的归类管理。 1、创建相册:可以新建多个相册。 2、上传图片:可以上传图片到相册里。 3、搜索:输入相册名称对相册的搜索。 二、点击相册进入可看到对图片的修改及其他功能。 1、替换上传:指把现在的图片替换成其他图片。 2、转移相册:指把现在的图片转移到其他相册。 3、设为封面:把现在所选图片设置成相册的封面展示。 4、删除图片:删除现在所选图片。 5、复制
问题内容: 我在Android应用程序上使用Retrofit + RxJava,并问自己如何处理API分页以链接调用,直到检索到所有数据。是这样的: 所述ApiResponse对象具有简单的结构: API将返回下一个值,直到最后一页。 有一些好的方法可以做到这一点吗?试图结合一些flatMaps(),但没有成功。 问题答案: 您可以递归建模: 然后,要消耗它, 那应该使您有一个流ResponseO
我有一个任务列表,它们之间有依赖关系,我正在考虑如何使用JGraphT来管理任务的顺序。我会将图形设置为有向图,并在处理顶点时删除顶点(或者我应该屏蔽它们吗?如果我一次只执行一个任务,我可以使用,但我希望并行化这些任务。我可以获取并检查直到我找到尽可能多的我想要执行一次,但理想情况下,会有像这样的东西。我看到Netflix提供了一个获取叶顶点的实用程序,所以我可以反转图形并使用它,但它可能不值得。
我是RxJava新手,不知道如何使用ConnectableObservable实现可重复轮询,2个订阅者在不同的线程上处理事件。 我有一条大致如下的管道: 我想以类似于解决方案的方式在延迟后重复整个管道https://github.com/ReactiveX/RxJava/issues/448 或带有repeatWhen()的动态延迟值。 这在普通(不可连接)可观察的情况下可以正常工作,但在多播情
我想在GTM中跟踪表格CTA确认。有两种形式,网址是相同的,CTA是相同的,但我想收集这两个CTA在不同的事件。我做了一个GTM触发器:当单击ID=我的CTA时,我收集信息“当用户单击该CTA时,发送了一个事件”,但是我想收集这些信息,基于我的表单版本,这只在两个方面有所不同的网站:-在这里是唯一的-在脚本: 如何在GTM中考虑触发器:当CTA ID=XXX和我的“TraceNeNe= 1”触发一