问题描述
由于WorkManager.cancel()不是即时的,我在后台重复了数据。
我试图通过将其设置为Single来立即取消。但这不起作用。
private fun cancelSendEventsWorkManager(): Single<Boolean> =
Single.fromCallable {
WorkManager.getInstance(requireContext()).getWorkInfosByTag(SendEventstWorker.TAG).cancel(true)
}.subscribeOn(Schedulers.io())
并在点击按钮事件中使用它:
Single.concat(
cancelSendEventsWorkManager(),eventsviewmodel.reportAllEvents(),eventsviewmodel.saveReportCompleted(),.subscribeOn(Schedulers.io())
.doOnSubscribe {
EventBus.post(ShowProgress(getString(R.string.common_dialog_progress_generic)))
}
.doOnError {
EventBus.post(dismissprogress())
listener?.showUnkNownErrorDialog()
}
.doOnComplete {
onReportAllEventAndCloseSessionSuccess(userName)
}
.subscribe(
{
},{
onReportAllEventAndCloseSessionSuccess(userName)
}
})
SendEventstWorker
class SendEventstWorker constructor(context: Context,workerParameters: WorkerParameters) : RxWorker(context,workerParameters) {
private val db: RpxDatabase = RpxDatabase.getInstance(context)
private val eventRepository: EventRepository
init {
eventRepository = db.eventRepository
}
override fun createWork(): Single<Result> {
// Get the input
val userId = inputData.getString(KEY_USER_ID)
return eventsRepository
.getAllventsByUserId(userId)
.flattenAsObservable {
Log.d(TAG,it.size.toString())
it
}
.concatMapSingle {
val event = it
val mapper = ObjectMapper()
val typeRef: TypeReference<HashMap<String,Any>> = object : TypeReference<HashMap<String,Any>>() {}
val map: Map<String,Any> = mapper.readValue(Event.data,typeRef)
reportingApi.reportEvent(e.eventventType.getValue(),event.id,event.eventCreateDate,event.bId,event.bHash,map)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.doOnSuccess {
deleteEvent(event)
}
.doOnError {
}
}
.toList()
//.subscribeOn(Schedulers.io())
.map { Result.retry() }
.onErrorReturn {
Result.retry()
}
}
private fun deleteEvent(event: Event) {
Single.fromCallable { eventRepository.deleteEvent(event) }
.subscribeOn(Schedulers.io())
.subscribe()
}
}
有什么办法可以正确地实现立即取消?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)