在Java for Android中,我想创建一个每秒增加1的变量,换句话说,它会计数,这样我可以检查是否在过去3秒内调用了函数,如果没有,我希望它能做出与以往不同的事情。
有没有内置方法可以做到这一点?我熟悉Timer类,但它似乎没有按照我想要的方式工作..还有什么吗?
tl; dr:我想创建一个每秒增加1的变量,因此我可以使用它根据自上次调用以来的时间长短来对待函数。是否有捷径可寻?如果没有,这样做的难点是什么?
答案 0 :(得分:6)
为什么不存储上次调用方法的时间,然后根据当前时间进行检查?
private long timeLastCalled;
public void someMethod() {
timeLastCalled = SystemClock.elapsedRealTime();
}
public boolean someMethodCalledRecently() {
return (SystemClock.elapsedRealTime() - timeLastCalled) > 3000;
}
答案 1 :(得分:0)
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();
答案 2 :(得分:0)
如果您只是需要查看该方法是否在最近3秒内被调用,您可以使用Handler
和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。 。