gpt4 book ai didi

java - 在 Android 上对 UI 元素采用响应式(Reactive)编程有什么真正的好处吗?

转载 作者:行者123 更新时间:2023-12-04 17:30:34 24 4
gpt4 key购买 nike

我试图在我的项目中采用响应式(Reactive)观察者模式并遇到了 RxBinding图书馆。一些人声称响应式 UI 实现模式的好处如下:

  • 更少样板代码
  • 一致的模式
  • 以及更具可读性的代码

但我想知道是否还有任何其他好处,例如更流畅的用户界面、更好的性能或更少的内存使用等...潜在的最终用户或运行该软件的设备可能会感谢您for? 而不是上面提到的那些似乎都是为了迎合开发者的好处。

更重要的是,这种模式有什么缺点吗?

由于我是 Kotlin 粉丝,有没有其他方法可以让我们利用 Kotlin 语言功能或 Android KTX 获得同样的好处?

来源:

最佳答案

Rx 在 android 上流行的主要原因之一是 java 7(缺少集合流 api 和 lambda)。结合旧的 retrolambda 插件(稍后 desugar 任务),Rx 为 java 7 带来了所有流功能和函数式编程风格。

现在我们有了 kotlin,它提供了更好的功能风格和出色的标准 api(包括流)。现在,kotlin 与coroutinesflow api 相结合可以取代旧的 Rx 方法。

当然,RxJava 不能完全被 kotlin 功能取代,它们有很多有用的运算符,如 throttle、concatenation、zip、share、combineLatest 等......对于复杂的流逻辑,RxJava 肯定胜过 kotlin 功能。

回到 RxBinding...许多简单的库逻辑现在可以用 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 来处理 steam 中的事件,那么您应该选择 RxBinding:

myButton.clicks()
.withLatestFrom(myBotton2.clicks(), editText.textChanges().skipInitialValue(), { ... })
.filter { it.locale != null }
.zipWith(detectLocation.text(), { ... })
.doOnNext(::maybeLog)
.subscribe(
this::handleSuccess,
this::handleError
)

RxBindings 不应影响现代设备上的 UI 性能 https://blog.newrelic.com/technology/android-art-vs-dalvik/ . RxJava 假定使用了大量匿名类,GC 将有更多工作要做,并且在代码出现问题时会发生内存泄漏。

关于java - 在 Android 上对 UI 元素采用响应式(Reactive)编程有什么真正的好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60113407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com