ObservableOnSubscribe 回调中侦听器的生命周期是什么 - Rxjava

穆罕默德·易卜拉欣

我已经为 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

原则:Symfony2侦听器与inclass生命周期回调

来自分类Dev

片段生命周期的侦听器

来自分类Dev

用RxJava替换侦听器

来自分类Dev

Android 中的 RxJava:当您没有生命周期时自动取消订阅

来自分类Dev

使用回调/侦听器链接RxJava可观察对象

来自分类Dev

如何使服务在生命周期事件侦听器中工作

来自分类Dev

在事务的生命周期(调用)中何时触发 Blockevent 侦听器?

来自分类Dev

在回调rxjava中返回Observable

来自分类Dev

在回调rxjava中返回Observable

来自分类Dev

如何避免 RxJava 中的嵌套回调?

来自分类Dev

在此动画侦听器中执行回调的最佳方法是什么?

来自分类Dev

Polymer生命周期:为什么尚未从“附加”回调中的DOM属性加载属性?

来自分类Dev

确保将项目传递到RxJava中的onNext侦听器

来自分类Dev

确保将项目传递到RxJava中的onNext侦听器

来自分类Dev

Java流生命周期回调

来自分类Dev

javascript异步回调生命周期

来自分类Dev

RxJava中的doOnNext(...)的用途是什么

来自分类Dev

AngularJS指令/控制器生命周期并取消绑定$ watch和$ on侦听器

来自分类Dev

对于RxJava中的每个

来自分类Dev

RxJava中的flatZip

来自分类Dev

RxJava中的AsyncTask

来自分类Dev

在RxJava中回顾链

来自分类Dev

对于RxJava中的每个

来自分类Dev

在rxJava中重试

来自分类Dev

在RxJava中过滤

来自分类Dev

RxJava 中的链接

来自分类Dev

与活动生命周期有关的侦听器行为

来自分类Dev

SwiftUI中@State变量的生命周期是什么?

来自分类Dev

结构中 FnMut 字段的参数的生命周期是什么?