我尝试的任何事情似乎都无法解决我的问题。
我有三个带有onClick行为的按钮。这些按钮中的每一个都调用相同的方法launchActivity
但具有不同的参数。 launchActivity
使用从onClick
方法接收的变量执行一些IO,然后返回一个intent。我希望能够实现一个RxKotlin / Java Flowable来集中处理三个onClick方法的背压,以便我可以实现BackpressureStrategy.DROP
。因此,如果onClick1
已启动onClick2
,则launchActivity
在onClick1
线程上io()
处理class ActivityLauncher {
fun onClick1() {
val intent = launchActivity(inFile1, outFile1)
startActivity(intent)
}
fun onClick2() {
val intent = launchActivity(inFile2, outFile2)
startActivity(intent)
}
fun onClick3() {
val intent = launchActivity(inFile3, outFile3)
startActivity(intent)
}
fun launchActivity(in: File, out: File): Intent {
// do IO with in and out files and create an intent
return intent
}
}
时仍会被删除。
onClick
如果我要像单身一样实现这一点,我实施fun onClick() {
Single.fromCallable(launchActivity(inFile, outFile)
.observeOn(scheduler.io())
.subscribeOn(scheduler.ui())
.subscribe { i -> startActivity(i) }
}
方法有点像:
launchActivity
但是,我无法弄清楚如何从共享的Flowable中调用onClick
,这可以被所有三种inFile
方法访问,同时仍然允许它们传递其唯一的outFile
和launchActivity
变量并强制执行背压。
基本标准是:
io()
主题onClick
launchActivity
时,将每个onClick[#]
方法的唯一参数传递给BackpressureStrategy.DROP
。launchActivity
用于确保仅在intent
launchActivity
生成的startActivity
传递给{{1}} 如何实现Flowable以允许此行为?
答案 0 :(得分:0)
这并不是真的需要以反应的方式完成,看起来你正在使用它,因为线程的便利性 - 没有任何问题,但是当你尝试建模时会带来复杂性使用Rx的情况。
Single
是正确使用的运算符 - 您只需要1个发射(BackpressureStrategy.DROP
中的Flowable
如果可以跟上,它们仍会发出下游项目。您只需在isClickable = false
的开头设置按钮onClick()
,然后将其设置回isClickable = true
- 类似于:
Single.fromCallable { launchActivity(inFile, outFile) }
.doOnSubscribe { disableButtonsFunction() }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doFinally { enableButtonsFucntion() }
.subscribe { i -> startActivity(i) }