繁体   English   中英

在另一个活动中取消 CountDownTimer

[英]Cancel a CountDownTimer in another activity

我在一项活动中有一个 CountDownTimer,需要在另一项活动中取消。 我遇到的问题是,即使我在另一个活动中调用 endTestTimer() 方法,CountDownTimer 也没有被取消。 这是 CountDownTimer 的代码:


private long testMillisLeft, questionMillisLeft;
private static CountDownTimer testTimer;

private void startTestTimer()
    {
        long startTime = DataHolder.getTestTime()*1000; //getTestTime() is the seconds
        testTimer = new CountDownTimer(startTime, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                testMillisLeft = millisUntilFinished;
                updateTestTimeLeft();
            }

            @Override
            public void onFinish() {
                Intent intent = new Intent(MainActivity4.this, MainActivity5.class);
                startActivity(intent);
            }
        }.start();

    }

    public static void endTestTimer()
    {
        if(testTimer != null)
        {
            testTimer.cancel();
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);

        testTimeLeft = (TextView) findViewById(R.id.testTimerTextView);
        mathProblem = (TextView) findViewById(R.id.mathProblemTextView);

        testTimer = null;
        startTestTimer();

    }

这是我试图在另一个活动中取消相同计时器的方式:


@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MainActivity4.endTestTimer();
    }

对此相关帖子的评论说 static CountDownTimer 会造成 memory 泄漏。 如果是这种情况,我如何在另一个活动中调用 endTestTimer() 方法并让它取消计时器? 或者,如果它不能是 static,我如何直接访问 testTimer CountDownTimer 并在另一个活动中调用它。

调查 Android 生命周期让我看到了这篇文章这篇文章,我发现这两篇文章都非常有帮助。 据我了解,当用户点击后退按钮时,会为当前显示的活动调用 onDestroy() 方法,然后为要显示的活动调用 onCreate() 方法。 因此,为了取消 MainActivity4 上的计时器(在我的例子中是当前活动),我将此代码添加到其 class 文件中:

@Override
    protected void onDestroy() {
        testTimer.cancel();
        questionTimer.cancel();
        super.onDestroy();
    }

现在,当用户退出 MainActivity4(不管其他活动将他们带到什么活动)并自动调用 onDestroy() 时,两个计时器都被取消,然后 MainActivity4 被销毁。 这对我来说似乎很好,但我不确定这样做是否有任何缺点,所以请告诉我是否有。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM