Java 可观察计时器-时间延迟不准确

Java 可观察计时器-时间延迟不准确,java,android,timer,rx-java,Java,Android,Timer,Rx Java,我在使用Observable.timer对象产生延迟时遇到了一个问题(Android平台,Java语言):compileSdkVersion 23,buildToolsVersion“23.0.3” 我想在活动按钮上设置onclick侦听器。按下按钮时,它应该扫描周围的信标(playBeaconScan()),然后设置一个20秒(20000毫秒)的计时器来停止进程 更准确地说,这一过程产生了两种可能的结果: 如果在20秒延迟之前找到信标,监听器(ListentScan)将替换为其他内容->此操

我在使用Observable.timer对象产生延迟时遇到了一个问题(Android平台,Java语言):compileSdkVersion 23,buildToolsVersion“23.0.3”

我想在活动按钮上设置onclick侦听器。按下按钮时,它应该扫描周围的信标(playBeaconScan()),然后设置一个20秒(20000毫秒)的计时器来停止进程

更准确地说,这一过程产生了两种可能的结果:

  • 如果在20秒延迟之前找到信标,监听器(ListentScan)将替换为其他内容->此操作正常
  • 如果20秒后未找到信标,则触发Observable.timer,从而停止信标扫描过程(调用stopBeaconScan)
这里的问题是20秒延迟没有得到尊重。实际上,计时器事件几乎总是在之前触发(范围为5-20秒,平均为10秒)。

我怀疑这个问题是使用Schedulers.io作为执行线程造成的,但在我看来,这是最适合这个用例的问题(尽管我不是这方面的专家)

非常感谢您在此方面的帮助

代码详情如下:

public class BeaconsScanActivity extends AppCompatActivity {
// ... some class fields

// listener to rescan
private View.OnClickListener listenToScan = (v-> {
    Log.d("DelayTest", "onClickBeaconScan");
    // launch scan process
    playBeaconScan();
    // Launch timer
    Observable.timer(20000 , TimeUnit.MILLISECONDS, Schedulers.io())
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe( l -> {
                Log.d(LOG_TAG,"Timer finished");
                stopBeaconScan();});
});

// ... class methods ...

你使用的是什么版本的rxjava?编译'com.netflix.rxjava:rxjavaandroid:0.20.5'你使用的是一个非常旧的版本。请改用
io.reactivex:rxandroid:1.2.0
。您解决了它,谢谢!我可能也会删除这个问题,但我建议将rx版本作为解决方案进行检查,它也可以帮助其他人。您使用的rxjava版本是什么?编译'com.netflix.rxjava:rxjava android:0.20.5'您使用的是非常旧的版本。请改用
io.reactivex:rxandroid:1.2.0
。您解决了它,谢谢!我可能也会删除这个问题,但我建议发布rx版本应该作为解决方案进行检查,它也可以帮助其他人。