我已经为 firebasesignInWithCustomToken()
方法完成了一个 Rxjava 包装器,这是代码:
public Observable<AuthResult> signInWithCustomToken(String token) {
return Observable.create(new ObservableOnSubscribe<AuthResult>() {
@Override public void subscribe(ObservableEmitter<AuthResult> emitter) throws Exception {
firebaseAuth.signInWithCustomToken(token)
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override public void onSuccess(AuthResult result) {
emitter.onNext(result);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override public void onFailure(@NonNull Exception e) {
emitter.onError(e);
}
})
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override public void onComplete(@NonNull Task<AuthResult> task) {
emitter.onComplete();
}
});
}
});
}
所以我想知道什么是三名听众的生命周期(OnSuccessListener
- - OnFailureListener()
)OnCompleteListener
与Rx回调里面,他们有回报可观察到的相同的生命周期,换句话说,如果我打电话observable.dispose()
,他们会从内存中清除?
我还有另一个问题,抱歉,这是以 Rx 方式对这种方法进行建模的最佳方式吗?
先谢谢你。
我正在回答我的问题,调用 dispose() 并不能保证从内存中删除这些侦听器。但是有一个很好的解决方案。每次从侦听器或回调创建 Observable 时,请确保设置一个 Cancelable 并清除那里的内容。
emitter.setCancellable(new Cancellable() {
@Override
public void cancel() throws Exception {
//clean memory
}
});
然而,在提到代码的情况下,firebase 没有提供一种方法来清除signwithCustomToken()
. 但其他像 DatabaseReference 有 removeListenr() 方法在取消时清除内容。
emitter.setCancellable(new Cancellable() {
@Override
public void cancel() throws Exception {
databaseReference.removeEventListener(valueEventListener);
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句