Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:onFinish()用于在声明新计时器后调用的倒计时计时器_Java_Android_Countdowntimer - Fatal编程技术网

Java Android:onFinish()用于在声明新计时器后调用的倒计时计时器

Java Android:onFinish()用于在声明新计时器后调用的倒计时计时器,java,android,countdowntimer,Java,Android,Countdowntimer,我正在编写一个HIIT(高强度间歇训练)活动,我正在为其实施一个间歇计时器。倒计时器应完成5分钟的热身,然后继续计时HIIT训练 public class WarmUpActivity extends ActionBarActivity{ TextView Mode; TextView Time; int minutes; long time_remaining; boolean warmup_finished; private CountDo

我正在编写一个HIIT(高强度间歇训练)活动,我正在为其实施一个间歇计时器。倒计时器应完成5分钟的热身,然后继续计时HIIT训练

 public class WarmUpActivity extends ActionBarActivity{

    TextView Mode;
    TextView Time;
    int minutes;
    long time_remaining;
    boolean warmup_finished;
    private CountDownTimer HIIT_Timer;


    private void StartTimer() {
         HIIT_Timer = new CountDownTimer(time_remaining, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                time_remaining = millisUntilFinished; //in case activity is paused or stopped
                Time.setText(" " + (int)floor(millisUntilFinished / 60000) + ":" + ((millisUntilFinished / 1000) % 60));

                if (warmup_finished == true) { //if we are in HIIT mode
                    if ((int)millisUntilFinished % 60000 == 0) { //every minute
                        if (Mode.getText() == "Low Intensity")
                            Mode.setText("High Intensity");
                        else
                            Mode.setText("Low Intensity");
                    }
                }
            }

            @Override
            public void onFinish() {
                if (warmup_finished==false){
                    Mode.setText("Low Intensity");
                    warmup_finished = true;
                    HIIT_Method();
                    return;
                }
                else  {
                    Completed_Method();
                    return;
                }

            }
        }.start();
    }


    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hiit_layout);

        Mode=(TextView) findViewById(R.id.mode);
        Time=(TextView) findViewById(R.id.time);

        warmup_finished=false;
        Mode.setText("Warm-Up");
        time_remaining=5*60000; //5 minutes when created

        }

    @Override
    public void onStart(){

        super.onStart();
        StartTimer();
        return;
    }


    private void HIIT_Method(){
        minutes=getIntent().getIntExtra(SelectHIITDuration.MINUTES, 0);
        time_remaining=minutes*60000;
        StartTimer();
        return;
    }

    private void Completed_Method(){
        Mode.setText("Workout Completed");

    }
}

当预热完成并且第一次调用
onFinish()
时,将调用
HIIT\u方法
,其中HIIT计时器应以用户指定的持续时间开始。问题是,在使用
Start\u timer()
声明新计时器后,会以某种方式调用
Completed\u方法。只能从
onFinish()
调用它。为什么在我声明了一个新计时器后调用了
onFinish()

我们需要将对startTimer的调用从onStart移到onCreate

这里的问题是理解活动的Android生命周期。一个比我理解得更好的人做了一个很好的解释

现在据我所知,在我们开始担心服务绑定和数据库查询之前,我们通常不会涉及onStart,但其他开发人员可能会有不同的想法


可以找到有关活动生命周期的官方android文档

您是否尝试过在oncreate而不是onstart中调用初始启动计时器?不确定这是否能解决任何问题。谢谢。这起作用了。我的新计时器启动时没有转到已完成的方法()。我不知道为什么会这样。如果您能给我一个解释,我将不胜感激,因为我是android开发的新手。请发送回复,让我知道这是否令人满意。