Я студент Android. Я хочу выучить RxJava. Мой вопрос "Что такое CompositeDisposable в 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) независимо от сложения и удаления нескольких расходных материалов, которая также очищается при уничтожении активности или фрагмента.