如何获得可观察到的最新价值

假设,我有一个计时器,它在一秒钟间隔后发出一个项目。

我想订阅它并执行它10秒钟。 10秒后,我取消订阅,然后我想能够从代码的其他部分访问其最后emmited值。 这里是示例代码:

@Test fun testMeasuretime(){ val emitter = Observable.interval(1, TimeUnit.SECONDS) .doOnNext{t: Long? -> Log.v("emitter", t.toString())} val disposable = emitter.subscribe() Thread.sleep(10000) disposable.dispose() Thread.sleep(5000) //get the last emited value Thread.sleep(5000) } 

有没有办法从代码的其他部分获取最后的emited值? 我想用这个解决方案来衡量一些任务的时间执行。

您可以通过使用doOnNext()设置类字段的值或在路径中插入BehaviorSubject来获取最后一个值。

但是,我不认为你的代码实际上是测量任务执行的CPU时间。 相反,它可能捕获可能不相关的线程上的处理的开始和结束点。 所以,你可以得到的最好的是挂钟时间。

更好的方法就像(用Java写的,因为我不知道Kotlin):

 long start = System.nanoTime(); performTaskOnThisThread(); long end = System.nanoTime(); long durationInNanoSeconds = end - start;