首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用CompositeDisposables的最佳实践是什么?

使用CompositeDisposables的最佳实践是什么?
EN

Stack Overflow用户
提问于 2018-06-12 18:55:44
回答 2查看 1.4K关注 0票数 0

我试着在onComplete()块上调用它,但是compositeDisposables.clear()通过修改网络调用会导致调用中途取消。

代码语言:javascript
运行
复制
                               observable.......
                               .subscribe(
                                {
                                    utilModule.logI("net repo response")
                                    //cleanDisposables()//this causes HttpOk cancelled error
                                },
                                {
                                    utilModule.logI("no repo response" + it.message)
                                    //cleanDisposables()
                                }
                        ))
    }

    private fun cleanDisposables() {
        //clean old network observables, dispose will prevent further observing
        utilModule.logI("disposing observables")
        if (!compositeDisposables.isDisposed) {
            compositeDisposables.clear()
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-12 19:40:15

通常情况下,您的可处置物品将绑定到您的活动或碎片生命周期,并在onDestroy中清除。

这可能是一个使用MVP设计模式的例子..。

代码语言:javascript
运行
复制
presenter.kt
fun dispose() {
    compositeDisposable.clear()
}


activity.kt
override fun onDestroy() {
    super.onDestroy()
    presenter.dispose()
}
票数 4
EN

Stack Overflow用户

发布于 2018-06-15 09:10:44

下面是我如何在MVVM中这样做的。我有生命周期编辑的活动,这是我的ViewModel。然后,在ViewModel类中,我有CompositeDisposable实例。我在ViewModel onCleared方法中这样做。

这是一个存根

代码语言:javascript
运行
复制
public class MyViewModel extends AndroidViewModel {
    private MyRepo mRepo;
    private CompositeDisposable mDisposables = new CompositeDisposable();


    public MyViewModel(@NonNull Application application) {
        super(application);

        mRepo = MysRepo.getInstance(...);
    }

    public void loadData()
    {
        Disposable d = mRepo.getMyPeculiarData()
                ...
                .subscribe(...);

        mDisposables.add(d);
    }


    @Override
    protected void onCleared() {
        super.onCleared();
        mDisposables.clear();
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50824023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档