android计时器间隔和重置

时间:2013-08-19 09:20:26

标签: android chronometer

我在以色列担任足球(足球)裁判,我被要求编写一份模拟我们即将到来的赛季健身测试的应用程序。 测试是间隔测试,用户可以输入他跑步,行走和设置多少时间。 每次开始/停止运行时都会发出蜂鸣声(beep变量属于MediaPlayer类型)。每次完成跑步/步行时,计时器都应重置。

以下代码几乎可以正常工作 - 在正确的时间内听到哔声,并在正确的数量后停止,但在天文台开始后屏幕会卡住......

非常感谢您的帮助! 谢谢,Yaad

private void testLoop() {
    int i = 0;
    boolean flag = true; //true = running, false = walking
    chronometer.setBase(SystemClock.elapsedRealtime());
    chronometer.start();

    //run, walk, rep = integers that are set by user input

    beep.start();
    tvRunWalk.setText("Running");
    tvRepNum.setText(String.format("Repetition Number: %d", i + 1));
    while (i < rep) //rep = number of repetitions
    {
        if (SystemClock.elapsedRealtime() - chronometer.getBase() == run * 1000 && flag) //if running time is over and you are now running
        {
            chronometer.setBase(SystemClock.elapsedRealtime());
            flag = false;
            tvRunWalk.setText("Walking");
            beep.start();
        }
        else if (SystemClock.elapsedRealtime() - chronometer.getBase() == walk * 1000 && !flag) //if walking time is over and you are now walking
        {
            chronometer.setBase(SystemClock.elapsedRealtime());
            flag = true;
            i++;
            tvRunWalk.setText("Running");
            tvRepNum.setText(String.format("Repetition Number: %d", i + 1));
            beep.start();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你的while循环阻止了用户界面。您最好使用AsyncTask并将循环放在其doInBackground()方法中,以便正确更新UI。

此处有更多信息:http://developer.android.com/reference/android/os/AsyncTask.html