ConactMap 使序列 API 调用有进度

ConactMap to make sequence API calls with progress

我想按顺序调用两个 API 并且它与我一起工作但是我在 activity 被销毁后在控制台中看到这个错误:

E/WindowManager: android.view.WindowLeaked: Activity com.deve.blueage.ui.register.RegisterActivity has leaked window DecorView@29a83fa[RegisterActivity] that was originally added here

这是我的代码:

  disposable.add(networkManager.postRequest(Endpoints.REGISTER_URL, param, UserModel.class)
                .map(this::storeUser)
                .concatMap(user -> {
                    HashMap<String, Object> param2 = new HashMap<>();
                    param2.put("username", user.getEmail());
                    param2.put("password", password);
                    return networkManager.postRequest(Endpoints.LOGIN_URL, param2, String.class)
                        .delay(1000, TimeUnit.MILLISECONDS)
                            .map(this::storeUserToken);
                }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnSubscribe(v -> baseView.showLoading())
                .doOnTerminate(() -> baseView.hideLoading())
                .subscribe(v -> signUpLiveData.setValue(true), this::processError));

知道哪里出了问题吗?

您的 networkManager.postRequest 流程似乎在 baseView 生命周期事件之后仍在运行。所以它将 link 保留在被破坏的视图中——这不好。 我推荐以下解决方案之一:

  • 考虑在链中使用某种媒介data-> medium-> view。它允许没有 link 的视图来自 lifecycle-unaware 组件。
  • Link 你的 Observable to View 的生命周期事件。所以,你的 当视图被销毁时,视图可以触发 Observable 流的 dispose()