我正在使用一个第三方库,我正在尝试使用RxJava封装它,这样我就可以通过RxJava实用程序向我的应用程序代码公开第三方库的功能。
在获得第三方库实例后,它需要在其上设置回调,以便当调用该库并完成它需要做的任何事情时,它可以回调到设置的回调Object,以通知应用程序它已经完成了它正在做的任何事情。
我认为这将是Subject的一个很好的用法,但我不太确定这是否是实现它的正确方法。当调用Wrapper类的doFirstThing方法时,Wrapper类将调用Subject的doOnSubscribe方法并设置一个新的Action0 Object,当调用该方法时,将对第三方库进行适当的方法调用。
当第三方库完成它正在做的任何事情时,它会在回调Object上调用Wrapper类设置的适当方法。在设置回调的方法中,Wrapper使用传递给回调方法的值调用Subject的onNext方法。
这是实现这类功能的正确方式吗?
public class Wrapper {
private final ThirdPartyLibrary mThirdPartyLibrary;
private final Subject<Boolean, Boolean> mCallbackSubject;
public Wrapper() {
mThirdPartyLibrary = ThirdPartyLibrary.getInstance();
mThirdPartyLibrary.setCallback(new WrapperThirdPartyCallback())
mCallbackSubject = new SerializedSubject<>(PublishSubject.<Boolean>create());
}
@Override
public Observable<Boolean> doFirstThing() {
return mConfigureSubject.doOnSubscribe(new Action0() {
@Override
public void call() {
mThirdPartyLibrary.doFirstThing();
}
});
}
public class WrapperThirdPartyCallback implements ThirdPartyCallback {
@Override
public void doOneThingComplete(boolean success) {
mCallbackSubject.onNext(success);
}
}
}发布于 2015-10-15 03:13:31
在这里使用Subject是合适的。然而,我不确定doOnSubscribe的用法,因为它调用doFirstThing的次数与订阅者的数量一样多,这些订阅者可能会并发运行,并可能会收到多个成功通知。
https://stackoverflow.com/questions/33127843
复制相似问题