Observable.timer - 时间延迟不准确

时间:2016-05-25 09:05:35

标签: java android timer rx-java

使用Observable.timer对象产生延迟时遇到问题(Android平台,Java语言):compileSdkVersion 23,buildToolsVersion" 23.0.3"

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

更确切地说,这个过程产生两种可能的结果:

  • 如果在20秒延迟之前发现信标,则监听器(listenToScan)将替换为其他内容 - >这很好。
  • 如果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 ...

0 个答案:

没有答案