rx-java2 - 如果用户离开屏幕,则不会执行 RxJava2 操作
问题描述
我通过 RxJava2 执行删除操作,导致刷新本地缓存,如下所示:
override fun removeExperience(experienceId: String, placeId: String): Completable {
return from(placesApi.deleteExperience(experienceId, placeId))
.andThen(from(refreshPlace(placeId))
.flatMapCompletable { Completable.complete() }
)
}
因此,只要删除操作完成(Completable
完成),就会触发刷新。问题是,有时这个删除操作需要足够长的时间让用户离开屏幕,然后该andThen
操作永远不会执行,因为不再有订阅者,因此屏幕上的信息不再是最新的。
有没有办法强制执行此操作?
解决方案
当用户再次打开同一个屏幕时,这个逻辑是否继续工作?如果是这样,那么您只需要完成from(placesApi.deleteExperience(experienceId, placeId))
对生命周期事件的订阅。最简单的方法是将整个订阅添加removeExperience()
到 Disposable 或 CompositeDisposable,然后触发其.dispose()
或.clear()
视图停止或销毁事件。
.dispose()
- 不允许使用存储的相同订阅。.clear()
- 允许重新订阅而不创建新的订阅实例
推荐阅读
- javascript - 在 Heroku 上使用 mobx 部署 Reactjs 项目后导致错误
- php - 如何确保数组对在 PHP 中是唯一的?
- unity3d - 为什么 Unity Shadergraph Lit Graph 显示精灵的方式不同?
- docker - 如何使用 NginX 和 prometheus 配置 Mtail
- java - 如何在几个片段之间进行背压
- haskell - Aeson - 简单地解码 ByteString -> Value
- javascript - 使用Javascript接口绘制Android Surfaceview时闪烁
- algorithm - 为什么 B 树的根可以有最小度 2?
- python - 编程课的早期编码
- reactjs - 如何使用 React Router 获取通过 Route 传递的道具