0

私は Android アプリケーションに取り組んでおり、関数が呼び出されていない時期を知りたいだけです。たとえば、関数があるとしましょう

void foo()
{
 ...//do something here;
}

私がやりたいのは、関数が 10 秒間呼び出されなかった場合の時間であり、その 10 秒後の時間を記録します。その後、関数が呼び出されて呼び出された場合、関数が再び開始される時間を記録したいと思います。Timer 関数を使用することを考えていましたが、関数が呼び出されたかどうかをテストする方法が正確にはわかりませんでした。

私は、人が歩き始めるか止まるかを見るアプリケーションに取り組んでいます。たとえば、誰かが 10 秒間足を止めた場合、その時間を記録したいと考えています。歩き始めたら、その時間も記録したい。これがより理にかなっていることを願っています。どんな助けでも大歓迎です!ありがとう!

4

2 に答える 2

2

考えられる解決策の 1 つは、ブール値フラグをコードに追加することです。たぶんそれを呼び出しますfooWasCalled。この変数を に初期化し、 insidefalseに設定します。次に、関数が呼び出されたかどうかを知る必要があるときに、フラグを確認するだけです。truefoo()

これは、何らかのアクションが発生したかどうかを確認するための非常に一般的なイディオムです。

ps タイマーを使用しているため、おそらくこのブール値フラグへのアクセスを同期するか、他のスレッドセーフなメカニズムを使用する必要があります。

于 2013-03-02T21:49:37.920 に答える
0

これはおそらくあなたが望むものです(完全なコードではなく、単なるアイデアです)

protected boolean mIsCountDownOn;

private class CountDownTimer mCountDownTimer = new CountDownTimer(10000, 10000)
{
    @Override
    public void onTick(long millisUntilFinished)
    {

    }

    @Override
    public void onFinish()
    {
        mIsCountDownOn = false;
    }
};

fooで

foo
{

    if (mIsCountDownOn)
    {
         // less than 10 seconds since the last time foo is called
         mCountDownTimer.cancel();
     }
     else
     {
          // more than 10 seconds since last call
          mIsCountDownOn = true;  // will start the timer at the end of foo body

          // Code to save mTime to wherever you want to save it.
     }


     // Whatever else foo supposes to do

     mTime = // get the time now
     mCountDownTimer.start();
}
于 2013-03-03T01:19:04.527 に答える