我尝试过的任何方法似乎都无法解决我的问题。
我有三个具有 onClick 行为的按钮。这些按钮中的每一个都调用相同的方法launchActivity
,但具有不同的参数。launchActivity
对从方法接收到的变量进行一些 IO,onClick
然后返回一个意图。我希望能够实现一个 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
}
}
如果我要以 Single 来实现它,我会实现这些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
fromlaunchActivity
被传递给startActivity
如何实现 Flowable 以允许这种行为?