我有一个代码,每x毫秒执行一次,其中x在应用程序生命周期中是可更改的。
现在,我使用处理程序的postDelayed函数,但是当延迟更改时,我无法管理这种情况。
handler.postDelayed(new Runnable() {
@Override
public void run() {
// do some staff
handler.postDelayed(this, x);
}
}, x);
我的问题是,在应用程序的其他部分,x
的值可能会发生变化,我需要在更改后立即执行run
函数中的代码,并继续无限执行延迟的代码(新值为x
)。
答案 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;