Какова лучшая практика использования CompositeDisposables - PullRequest
0 голосов
/ 12 июня 2018

Я пытался вызвать его в блоке onComplete (), но CompositeDisposables.clear () с сетевыми вызовами дооснащения вызывает отмену вызовов на полпути.

                               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()
        }
    }

Ответы [ 2 ]

0 голосов
/ 15 июня 2018

Вот как я это делаю в MVVM.У меня есть LifeCycle-ed Activity, которая подключается к моей ViewModel.Тогда в классе ViewModel у меня есть экземпляр CompositeDisposable.Я делаю clear это в методе ViewModel onCleared.

вот заглушка

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();
    }

}
0 голосов
/ 12 июня 2018

Как правило, ваши расходные материалы будут привязаны к жизненному циклу вашей деятельности или фрагментов и очищены в onDestroy.

Это может быть примером использования шаблона проектирования MVP ...

presenter.kt
fun dispose() {
    compositeDisposable.clear()
}


activity.kt
override fun onDestroy() {
    super.onDestroy()
    presenter.dispose()
}
...