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