首页 > 解决方案 > 生命周期活动秒表

问题描述

我是安卓新手。了解活动的生命周期。我很难理解这里的逻辑。共有三个变量: boolean runningwasRunning和 int 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;
        }

标签: android

解决方案


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

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

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

所以这两个函数的组合在后台时会忽略所有的定时器事件,但是当它重新回到前台时会重新开始监听它们。


推荐阅读