假设我们有一个rxjava observable作为类字段:
public class MyClass {
private final Observable<Integer> myObservable = Observable.just(1);
public Observable<Integer> getMyObservable() {
return myObservable;
}
}
在这种情况下,只有一个observable实例与类客户端共享。
当总是返回一个新的可观察实例时,性能命中如何:
public class MyClass{
public Observable<Integer> getMyObservable() {
return Observable.just(1);
}
}
我问,因为在我的代码库中,我有很多可以在方法调用中创建和返回的observable。 我想知道创建然后返回的类实例是不是一个好主意?
答案 0 :(得分:1)
我认为在性能方面没有太大差异。无论如何,我在第一个实现中看到了一个问题:我认为你不会使用always 1作为项目从Observable
发出。实际上,你可能想要这样的东西:
public class MyClass {
private int value = 100;
private final Observable<Integer> myObservable = Observable.just(value);
public Observable<Integer> getMyObservable() {
return myObservable;
}
}
我的意思是,我期望发出类的参数,就像在示例中一样。
问题在于,无论变量将采用的下一个值如何,发出的值始终为100。我们来看一个例子:
MyClass mc = new MyClass();
mc.getMyObservable().subscribe(value -> print(value));
mc.setValue(200);
mc.getMyObservable().subscribe(value -> print(value));
您希望打印100和200,但您将得到的是100倍。这是因为当您将Observable.just(value)
分配给变量myObservable
时,您正在修复将要修改的值总是发出。
为了防止这种情况,您可以使用defer
运算符:
private final Observable<Integer> myObservable = Observable.defer(() -> Observable.just(value));
现在,来自observable的发出项将是订阅时变量的值。
注意:使用fromCallable
运算符可以获得相同的结果:
private final Observable<Integer> myObservable = Observable.fromCallable(() -> value);