2

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

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

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

4

3 回答 3

7

为什么不存储上次调用该方法的时间,然后对照当前时间进行检查?

private long timeLastCalled;

public void someMethod() {
    timeLastCalled = SystemClock.elapsedRealTime();
}

public boolean someMethodCalledRecently() {
    return (SystemClock.elapsedRealTime() - timeLastCalled) > 3000;
}
于 2013-08-09T15:57:02.780 回答
0

如果您只需要查看该方法是否在最后 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。.

于 2013-08-09T15:45:09.793 回答
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();
于 2013-08-09T15:37:38.567 回答