在 onDispose 期间对 RxJava 链中的对象执行操作

Perform action on object in the RxJava chain during onDispose

我有一个像这样的 RxJava 链:

Single.timer(500, TimeUnit.MILLISECONDS)
    .map { createMyObject() }
    .doOnDispose {
         // how to access MyObject here? I want to call:
         myObject.dismiss()
    }
    .subscribe { myObject ->
        // do something with myObject
    }

但是,.doOnDispose 需要一个 Action 而不是 Consumer,所以我无法访问其中先前映射的 myObject

我现在正在做的是在 Rx 链之外有一个外部可空变量来保存对象:

var myObject: MyObject? = null
Single.timer(500, TimeUnit.MILLISECONDS)
    .map { 
         myObject = createMyObject() 
         return@map myObject
    }
    .doOnDispose {
         myObject?.dismiss()
    }
    .subscribe { myObject ->
        // do something with myObject
    }

但我不喜欢将它暴露在链外的想法。有更好的方法吗?

您可能应该使用 Single.using 在适当的时候正确处理处置操作

类似于

Single.using({createMyObject()}, {something(it)}, {it.dismiss}).subscribe{...}

http://reactivex.io/documentation/operators/using.html