在 Java for Android 中,我想创建一个每秒增加 1 的变量,换句话说,它很重要,这样我可以检查过去 3 秒内是否调用了函数,如果没有,我想要它做一些与以前不同的事情。
有没有内置的方法可以做到这一点?我对 Timer 类很熟悉,但它似乎并没有按照我想要的方式工作。还有什么别的吗?
tl;dr:我想创建一个每秒增加 1 的变量,因此我可以使用它根据自上次调用以来的时间长度来区别对待函数。是否有捷径可寻?如果没有,这样做的困难方法是什么?
为什么不存储上次调用该方法的时间,然后对照当前时间进行检查?
private long timeLastCalled;
public void someMethod() {
timeLastCalled = SystemClock.elapsedRealTime();
}
public boolean someMethodCalledRecently() {
return (SystemClock.elapsedRealTime() - timeLastCalled) > 3000;
}
如果您只需要查看该方法是否在最后 3 秒内被调用,您可以使用 aHandler
和一个Boolean
标志来完成此操作。
private Handler mHandler = new Handler();
private boolean wasRun = false;
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if(wasRun){
//whatever you want to do if run
}
mHandler.postDelayed(this, 3000);
}
},3000); //3 sec
在此示例中,Handler
将延迟 3 秒运行。每次运行时,它都会通过评估 if(wasRun) 来检查是否曾调用过另一个方法。这样,您可以更改如果该方法被调用/未被调用时会发生什么。然后,处理程序将在另一个 3 秒延迟后再次启动自身。然后,您所要做的就是将 wasRun 标志更新为如果您的方法被调用,则为 true,否则为 false。.
final int[] yourVariable = new int[1];
yourVariable[0] = 0;
updateVariableTimer = new CountDownTimer(howLongYouWantTimerToLast, 1000) {
@Override
public void onTick(long l) {
yourVariable[0] += 1;
}
}.start();
或者,也可以使用标志而不是跟踪变量计数:
final boolean functionCalledRecently = false;
hasFunctionBeenCalledRecentlyTimer = new CountDownTimer(3000, 1000) {
@Override
public void onTick(long l) {
functionCalledRecently = true;
}
@Override
public void onFinish() {
functionCalledRecently = false;
}
}.start();