Я все еще новичок в RxJava и пытаюсь что-то реализовать с его помощью.
У меня есть счетчик уведомлений в моем приложении Android, и я хочу получать счетчик из API каждые пять минут, и я хочуразделить этот счет на несколько видов деятельности.Поэтому я хочу сохранить счетчик в конвейере, чтобы каждое действие, прослушивающее этот конвейер, могло получить последнее переданное значение.
Я начал с класса Object и добавил два BehaviorSubjects
один для предоставления значения по умолчанию ивторой, чтобы выдать истинное значение, когда 5 минут заканчиваются, «чтобы сообщить активности, которая прослушивает, если есть», что вы должны получить новый счет.
Но проблема в том, что когда я слушаю BehaviorSubject, он испускает вседанные в конвейере!Как я могу получить только этот последний
object RxBus {
@JvmStatic
var count: Int = 0
@JvmStatic
private var fetchData: Boolean = true
@JvmStatic
private var behaviorSubject: BehaviorSubject<Any> = BehaviorSubject.createDefault(CountEvent(count))
@JvmStatic
private var fetchSubject: BehaviorSubject<Any> = BehaviorSubject.createDefault(FetchEvent(fetchData))
private val FIVE_MINUTES: Long = 1000 * 60 * 5
init {
fixedRateTimer("countTimer", false, 0L, FIVE_MINUTES) {
fetchSubject.onNext(FetchEvent(true))
}
}
fun publish(event: Any) {
if (event is CountEvent) {
Log.d(TAG, "eventCount = ${event.count}")
count = event.count
fetchData = false
}
}
fun listenToLoadEvent(): Observable<FetchEvent> {
return fetchSubject.ofType(FetchEvent::class.java)
}
fun listen(): Observable<CountEvent> {
return behaviorSubject.ofType(CountEvent::class.java)
}
Обратите внимание, что я хочу прослушать оба предмета в onResume
каждого упражнения. Есть ли способ сделать это лучше?И если нет, вы можете помочь мне получить только последний испущенный предмет.
Заранее спасибо