Одной из основных причин, по которой Rx становится популярным на android, является java 7 (отсутствие коллекций, потоковых api и lambdas). В сочетании со старым плагином retrolambda (задача desugar позже) Rx предоставляет java 7 всех потоковых функций и разновидностей функционального программирования.
Теперь у нас есть kotlin, которые предлагают более лучший функциональный стиль с отличным стандартным API (потоки включительно). Теперь kotlin в сочетании с сопрограммами и flow api может заменить старые подходы Rx.
Конечно, Rx Java нельзя полностью заменить функциональностью kotlin , у них есть много полезных операторов, таких как throttle, сцепление, zip, share, combLatest et c ... Для сложных потоковых логи c Rx Java наверняка превосходит kotlin функций.
Вернемся к RxBinding ... множество простых библиотек logi c теперь можно заменить синтаксисом kotlin, и вот несколько примеров:
infix fun <V : View> V.onClick(block: V.() -> Unit) = setOnClickListener { block(it as V) }
myCheckboxView onClick { isChecked = !isChecked }
fun EditText.onTextChange(block: (String) -> Unit) {
this.addTextChangedListener(object: TextWatcher {
override fun afterTextChanged(s: Editable?) { block(s.toString()) }
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
})
}
myEditText.onTextChange(this::printTheText)
Но если вам нужно больше мощных API для работы с событиями в паре вам следует выбрать RxBinding:
myButton.clicks()
.withLatestFrom(myBotton2.clicks(), editText.textChanges().skipInitialValue(), { ... })
.filter { it.locale != null }
.zipWith(detectLocation.text(), { ... })
.doOnNext(::maybeLog)
.subscribe(
this::handleSuccess,
this::handleError
)
RxBindings не должен влиять на производительность пользовательского интерфейса на современных устройствах https://blog.newrelic.com/technology/android-art-vs-dalvik/. Rx Java предполагает использование большого количества анонимных классов, а у G C будет больше работы и утечек памяти в случае проблем в вашем коде.