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

时间:2018-12-04 16:40:58

标签: java android android-handler postdelayed

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

现在,我使用处理程序的postDelayed函数,但是当延迟更改时,我无法管理这种情况。

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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 };

答案 1 :(得分:0)

如何创建具有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;