生命周期活动秒表

时间:2018-10-17 21:53:04

标签: android

我是android新手。 了解活动的生命周期。 我在这里很难理解逻辑。 有三个变量: 布尔runningwasRunning和整数seconds。 我无法理解onStoponStart中的代码。有人可以解释下面共享代码的逻辑,为什么我们要使用wasRunning

 public void runTimer()
        {
            start.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    running = true;
                }
            });

            stop.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    running = false;
                }
            });

            reset.setOnClickListener(newView.OnClickListener() {
                @Override
                public void onClick(View v) {
                    running = false;
                    seconds = 0;
                }
            });


     Handler handler = new Handler();
            handler.post(new Runnable() {
                @Override
                public void run() {
                    int hours = seconds / 3600;
                    int min = (seconds % 3600) / 60;
                    int sec = seconds % 60;
                    String time = String.format("%d:%02d:%02d", hours, min, sec);
                    text.setText(time);
                    if (running) {

                        seconds++;


                    }
                    handler.postDelayed(this, 1000);
                }
            });
        }

        @Override
        protected void onStop() {
            super.onStop();
            wasRunning=running;

            running=false;
        }


        @Override
        protected void onStart() {
            super.onStart();
            if(wasRunning);
            running=true;
        }

1 个答案:

答案 0 :(得分:1)

这实际上是非常糟糕的代码。它保持一个连续运行的计时器,并在不运行时使用标志忽略它。相反,当活动停止时,应停止计时器以使用较少的CPU资源。但这是它的作用:

OnStop-当活动处于后台时,开始忽略计时器事件,并设置一个标志(wasRunning)以知道活动在上一次活动时是否在运行。

onStart-如果计时器在上一次使应用程序前台运行时正在运行,请停止忽略计时器事件。

所以这两个功能的组合将在后台时忽略所有计时器事件,但是在重新获得前景时再次开始监听它们。