我尝试过的任何方法似乎都无法解决我的问题。
我有三个具有 onClick 行为的按钮。这些按钮中的每一个都调用相同的方法launchActivity,但具有不同的参数。launchActivity对从方法接收到的变量进行一些 IO,onClick然后返回一个意图。我希望能够实现一个 RxKotlin/Java Flowable 来共同处理三个 onClick 方法的背压,这样我就可以实现BackpressureStrategy.DROP. 因此,如果在仍在线程上处理的情况下启动,则如果onClick1启动onClick2将被丢弃。launchActivityonClick1io()
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- 结果
intentfromlaunchActivity被传递给startActivity
如何实现 Flowable 以允许这种行为?