【问题标题】:RxJava call disposable dispose()RxJava 调用一次性 dispose()
【发布时间】:2019-02-13 18:43:45
【问题描述】:

我正在使用 rxjava 进行改造。在以下代码中,subscribeOn() 和 observeOn() 继续运行。应用程序不断地自行终止和启动。

disposable = api.getUsers("135")
                .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({
                users -> showResult(users)
            })

如果我在上述操作之后立即处理,它不会获取完整的数据。所以我的问题是什么时候处理 dispoable 或者如何知道 subscribeOn() 和 observeOn() 什么时候完成了它的任务。

【问题讨论】:

    标签: android rx-java retrofit rx-java2 rx-android


    【解决方案1】:

    您可以在onDestroy()Activitydispose

    或者你可以永远使用DisposableSingleObserver,像这样:

    Disposable disposable = yourApi.subscribeWith(new DisposableSingleObserver<List<String>>() {
    
            @Override
            public void onSuccess(List<String> values) {
                // work with the resulting values
            }
    
            @Override
            public void onError(Throwable e) {
                // handle the error case
            }
        });
    

    然后在您使用结果之后(在本例中,当您不再需要值(api 响应)时,您可以调用 dispose

        disposable.dispose();
    

    安置观察者的最佳地点是onDestory(),这将是您不再需要api结果的地方:

    protected void onDestroy(){
        super.onDestroy();
        disposable.dispose();
    }
    

    【讨论】:

    • @abhishek-borikar 希望这个答案能消除您的疑虑。
    • @abhishek-borikar 随意接受答案,因为它解决了您的问题
    • 您应该在 onStop() 中调用 dispose() 而不是 onDestroy()。想象一个场景,在调用 API 之后,您的活动进入后台。该活动当时可能尚未被销毁,因此您不会丢弃一次性用品。如果此时 API 返回结果,您可能会遇到意外行为。
    • 如果你将 dispose() 放在 onStop() 而不是 onDetroy() 中,当用户返回视图时会出现问题,因为所需的信息不会被加载,而你的一次性已经处置()。所以,最好的办法是 onDestroy()... 示例:立即加载一个新活动将调用第一个活动的 onStop()
    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2016-11-24
    • 2015-08-15
    • 2017-07-23
    相关资源
    最近更新 更多