Что такое CompositeDisposable в RxJava

Я студент Android. Я хочу выучить RxJava. Мой вопрос "Что такое CompositeDisposable в RxJava?". Пожалуйста, опишите подробно.

Ответ 1

Композитный одноразовый делает утилизацию (думаю, отмена раньше, легче). Допустим, у вас есть действие, в котором одновременно происходит несколько вызовов API:

var disposable = api.call1(arg1, arg2).subscribe(...)
var disposable2 = api.call2(arg1).subscribe(...)
var disposable3 = api.call3().subscribe()

Если вам нужно преждевременно избавиться (например, пользователь отходит от действия), вам нужно сделать это:

disposable.dispose()
disposable2.dispose()
disposable3.dispose()

Если вы вместо этого используете CompositeDisposable, вы можете хранить в нем все одноразовые материалы. Вот так:

val composite = CompositeDisposable()
composite.add(api.call1(arg1, arg2).subscribe(...))
composite.add(api.call2(arg1).subscribe(...))
composite.add(api.call3().subscribe())

А затем вы можете сделать один вызов вместо:

composite.dispose()

Если вы используете kotlin, вы можете использовать перегрузку операторов, чтобы это выглядело лучше:

  operator fun CompositeDisposable.plusAssign(disposable: Disposable){
        this.add(disposable)
    }

Что позволяет вам выразить это как:

val composite = CompositeDisposable()
composite += api.call1(arg1, arg2).subscribe(...)
composite += api.call2(arg1).subscribe(...)
composite += api.call3().subscribe()

Утилизируемый означает запрос (думайте, что работа выполняется) и имеет метод dispose для удаления запроса.

Ответ 2

CompositeDisposable - это всего лишь класс, позволяющий хранить все свои одноразовые предметы в одном и том же месте, чтобы вы могли сразу все распоряжаться. Подобно:

Disposable disposable1;
Disposable disposable2;
Disposable disposable3;

CompositeDisposable composite = new CompositeDisposable();
composite.addAll(disposable1, disposable2, disposable3)
composite.dispose()

Все тогда расположены

Ответ 3

CompositeDisposable - это удобный класс для объединения нескольких утилизируемых Disposable, так что вы можете избавиться от них всех одним вызовом метода CompositeDisposable.

Вы можете добавить одноразовые материалы в CompositeDisposable с помощью CompositeDisposable#add

Вместо того, чтобы вызывать dispose() для каждого Disposable отдельно, вы вызываете CompositeDisposable#clear() для удаления всех Disposable, которые были добавлены. Если вы хотите удалить все текущие Disposable и автоматически удалить любые Disposable которые будут добавлены в будущем, вызовите CompositeDisposable#dispose(). Это имеет смысл, вы буквально удаляете CompositeDisposable когда вызываете dispose() для него, поэтому имеет смысл, что все добавляемые вами Disposable удаляются.

Ответ 4

Добавление к вышеуказанному CompositeDisposable обеспечивает согласованную пространственную сложность O (n) независимо от сложения и удаления нескольких расходных материалов, которая также очищается при уничтожении активности или фрагмента.