2

Java for Android で、1 秒ごとに 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 秒以内に呼び出されたかどうかを確認する必要がある場合は、これを実行するために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 に更新するだけです。.

于 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 に答える