Android创建一个每秒递增一次的变量

时间:2013-08-09 15:33:16

标签: android timer counter intervals seconds

在Java for Android中,我想创建一个每秒增加1的变量,换句话说,它会计数,这样我可以检查是否在过去3秒内调用了函数,如果没有,我希望它能做出与以往不同的事情。

有没有内置方法可以做到这一点?我熟悉Timer类,但它似乎没有按照我想要的方式工作..还有什么吗?

tl; dr:我想创建一个每秒增加1的变量,因此我可以使用它根据自上次调用以来的时间长短来对待函数。是否有捷径可寻?如果没有,这样做的难点是什么?

3 个答案:

答案 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秒内被调用,您可以使用HandlerBoolean标志来完成此操作。

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。 。