Как правильно позвонить на сервис дооснащения с помощью rxJava? - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь понять rxJava, и я ищу эксперта или кого-то с опытом, чтобы попытаться решить мой вопрос, дело в том, что я использую RxJava в течение года, но только для Retrofit звонки, я использовал Disposable и делал что-то вроде:

disposable = myService.myInterface.getData()
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(this::handleResponse, this::handleError))

Хорошо, но когда я ищу в Google, я вижу людей, использующих CompositeDisposable, и они вместо disposable = ... делают compositeDisposable.add(....) Я хотел бы знать, когда использовать каждый из них, я также говорю Single предназначен для возврата либо значения, либо ошибки, но в чем же разница между Observable? Если Single может вернуть также List<Object>.

И в другом примере я использую это:

private var subscription: Disposable? = null
subscription = model.result()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(object : DisposableObserver<ListViewModel>() {
                override fun onNext(viewModel: ListViewModel) {
                    if (mView != null) {
                        mView!!.updateData(viewModel)
                    }
                }

                override fun onError(e: Throwable) {
                    e.printStackTrace()
                    if (mView != null) {
                        mView!!.showError()
                    }
                }

                override fun onComplete() {
                    if (mView != null) {
                        mView!!.hideProgressBar()
                    }
                }
            })

Я заметил, что если я использую add.(..) вещь в onStop(), я должен очистить compositeDisposable

А также я использую disposable без onNext, onError и onComplete Не могли бы вы, ребята, дать мне знать, когда будете использовать все это?

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Похоже, у вас много путаницы с RxJava. Сначала знакомится с концепцией RxJava, в частности Observable, Single, Completeable и т.д. При правильном использовании планировщика. Тогда вам все станет ясно.

И Disposable используется, когда у вас есть только одна подписка в нашем классе или вы хотите обрабатывать все подписки независимо.

Используйте CompositeDisposable, когда вы складываете все свои подписки в один одноразовый, чтобы вы могли очистить простым способом в зависимости от жизненного цикла.

0 голосов
/ 06 мая 2019

Различие в ядре между Observable и Single относительно легко объяснить:

  • Observable может излучать от 0 до бесконечных значений
  • A Single, с другой стороны, излучает только 1 раз

CompositeDisposable рекомендуется для «обычного» * ​​1014 *, потому что вы можете составлять Disposables с ним. Почему это полезно? Допустим, вы вызываете 3 разных сетевых запроса одновременно, затем вы можете добавить все эти Disposables к CompositeDisposable. Теперь, если вы переключаете активность, например, вы не хотите продолжать эти 3 запроса. Для этого вызывается dispose() функция CompositeDisposable. Он удалит все Disposables и не позволит добавлять новые. Наоборот, есть также функция с именем clear(), которая также удаляет все одноразовые материалы, но позволяет добавлять новые.

Таким образом, вместо того, чтобы вручную удалять все Disposables один за другим, вы можете справиться с этим одним вызовом метода. Следовательно, CompositeDisposable можно представить как «менеджер» для Disposables.

И даже при использовании обычного Disposable вы должны вызвать функцию dispose(). В противном случае вы можете продолжить работу Observables, хотя находитесь в совершенно другой части приложения.

...