Ничто из того, что я пробовал, похоже, не решило мою проблему.
У меня есть три кнопки с поведением 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
из launchActivity
передается в startActivity
Как мне реализовать Flowable, чтобы разрешить такое поведение?