首页 > 解决方案 > 如果用户离开屏幕,则不会执行 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操作永远不会执行,因为不再有订阅者,因此屏幕上的信息不再是最新的。

有没有办法强制执行此操作?

标签: rx-java2

解决方案


当用户再次打开同一个屏幕时,这个逻辑是否继续工作?如果是这样,那么您只需要完成from(placesApi.deleteExperience(experienceId, placeId))对生命周期事件的订阅。最简单的方法是将整个订阅添加removeExperience()到 Disposable 或 CompositeDisposable,然后触发其.dispose().clear()视图停止或销毁事件。

  • .dispose()- 不允许使用存储的相同订阅。
  • .clear()- 允许重新订阅而不创建新的订阅实例

推荐阅读