如何获得可观察到的最新价值
假设,我有一个计时器,它在一秒钟间隔后发出一个项目。
我想订阅它并执行它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;
- Android Kotlin不能在lambda中使用list.sort()
- 我们是否应避免在Kotlin中命名与现有类相同的函数? 为什么?
- Android室数据库错误:未使用的参数:在@Query函数中的天数
- Kotlin + SpringBoot 2.0.0-M4失败tu加载应用程序上下文(BeanCreationException)
- 如何在kotlin的片段类中初始化视图?
- Kotlin的Iterable和Sequence看起来完全一样。 为什么需要两种类型?
- 使用Kotlin-Mokito库时java.lang.reflect.InvocationTargetException
- 在Kotlin中,我如何习惯性地访问可空的嵌套地图值,或者返回一个默认值?
- Android数据绑定与Kotlin,BaseObservable和一个自定义委托