每 x 毫秒执行一次代码,可更改

code to be executed every x milliseconds, changeable

我有一段代码每 x 毫秒执行一次,其中 x 在应用程序生命周期中是可变的。

现在我使用处理程序的 postDelayed 函数,但是当延迟发生变化时我无法处理这种情况。

handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        // do some staff

        handler.postDelayed(this, x);
    }
}, x);   

我的问题是在应用程序的其他部分 x 值可以改变,我需要在改变后立即执行 run 函数中的代码,并继续无限执行延迟代码(新值为 x)。

保存对 Runnable 的引用并将延迟保持为 class 变量,如下所示:

private Long x = 1000L;
private Runnable r = new Runnable() {
    @Override
    public void run() {
        // do some staff
        handler.postDelayed(this, x);
    }
}

然后

handler.post(r);

开始吧。

然后创建一个 setter and getter for x 来处理更改:

setX(Long: value){ 
    if(x != value){
        x = value
        handler.removeCallbacks(r);
        //run immediately
        handler.post(r);
    }
}

getX(){ return x };

如何创建新的 class 将 x 作为静态变量

class DelayInterval { 
    public static int x = 1000;
}

然后打电话给你的 postDelay

handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        // do some staff

        handler.postDelayed(this, DelayInterval.x);
    }
}, DelayInterval.x);   

并且在您的代码中的某处,您可以更改 x

DelayInterval.x = 3000;