0

私はイスラエルでフットボール (サッカー) の審判として働いており、次のシーズンのフィットネス テストをシミュレートするアプリケーションを作成するように依頼されました。テストはインターバルテストで、ユーザーはランニング、ウォーキング、セット数を入力できます。実行を開始/停止するたびにビープ音が鳴ります (beep変数のタイプは ですMediaPlayer)。クロノメーターは、ランニング/ウォーキングが終了するたびにリセットされます。

次のコードはほとんど機能します - ビープ音は適切なタイミングで聞こえ、適切なセット数の後に停止しますが、クロノメーターが開始した直後に画面が動かなくなります...

あなたの親切な助けに本当に感謝します! ありがとう、ヤード

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();
        }
    }
}
4

1 に答える 1

0

while ループが UI をブロックしています。UI を適切に更新するには、ループを使用AsyncTaskしてそのメソッドに入れることをお勧めします。doInBackground()

詳細はこちら: http://developer.android.com/reference/android/os/AsyncTask.html

于 2014-01-02T16:13:34.593 に答える