首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取消android CountDownTimer

取消android CountDownTimer
EN

Stack Overflow用户
提问于 2015-07-09 02:25:41
回答 1查看 149关注 0票数 1

在我的应用程序中,我使用的是CountDownTimer,希望用户能够重新设置应用程序中的数据并重新开始。我遇到的问题是,如果你启动一个计时器,比如说,3分钟,然后过了很短的时间,你调用我的重置函数,将所有分数设置为初始值,然后启动一个新的计时器,例如,10分钟.计时器立即拿起它停止说2:24,2:23,2:22……

我在任何地方读到的东西都说您调用countdowntimername.cancel(),然后设置countdowntimername = null;

我就是这样做的,这根本行不通。一定有更有效的方法杀死这些计时器吗?有什么想法吗?

酱汁:

代码语言:javascript
复制
private void toggleTimer() {
    if (timerStarted == false) {
        final CountDownTimer countDownTimer = new CountDownTimer(startTime, interval) {

            public void onTick(long millisUntilFinished) {
                    if (timerPaused == true) {
                        cancel();
                    } else {
                        timeRemaining = millisUntilFinished;
                        long remainder = millisUntilFinished;
                        minuteTens = df.format(millisUntilFinished / 600000);
                        remainder = remainder - (Integer.valueOf(minuteTens) * 600000);
                        minuteOnes = df.format(remainder / 60000);
                        remainder = remainder - (Integer.valueOf(minuteOnes) * 60000);
                        secondTens = df.format(remainder / 10000);
                        remainder = remainder - (Integer.valueOf(secondTens) * 10000);
                        secondOnes = df.format(remainder / 1000);
                        setCountdownText();
                    }
            }

            public void onFinish() {
                minuteTens = "0";
                minuteOnes = "0";
                secondTens = "0";
                secondOnes = "0";
                setCountdownText();
                timerStarted = false;
                Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                v.vibrate(1000);
            }
        }.start();
        timerStarted = true;
    } else {
        if (timerPaused == false) {
            pauseTimer();
        } else {
            resumeTimer();
        }
    }
}

还包括:

代码语言:javascript
复制
private void resumeTimer() {
    timerPaused = false;
    startTime = timeRemaining;
        CountDownTimer countDownTimer = new CountDownTimer(startTime, interval) {

            public void onTick(long millisUntilFinished) {
                if (timerPaused == true) {
                    cancel();
                } else {
                    timeRemaining = millisUntilFinished;
                    long remainder = millisUntilFinished;
                    minuteTens = df.format(millisUntilFinished / 600000);
                    remainder = remainder - (Integer.valueOf(minuteTens) * 600000);
                    minuteOnes = df.format(remainder / 60000);
                    remainder = remainder - (Integer.valueOf(minuteOnes) * 60000);
                    secondTens = df.format(remainder / 10000);
                    remainder = remainder - (Integer.valueOf(secondTens) * 10000);
                    secondOnes = df.format(remainder / 1000);
                    setCountdownText();
                }
            }

            public void onFinish() {
                minuteTens = "0";
                minuteOnes = "0";
                secondTens = "0";
                secondOnes = "0";
                setCountdownText();
                timerStarted = false;
                Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                v.vibrate(1000);
            }
        }.start();
    }

以及重置方法:

代码语言:javascript
复制
private void resetScores() {
    final TextView P1CountDownTimer = (TextView) findViewById(R.id.P1CountDownTimer);
    final TextView P2CountDownTimer = (TextView) findViewById(R.id.P2CountDownTimer);
    timerStarted = false;
    timerPaused = false;
    minuteTens = "0";
    minuteOnes = "0";
    secondTens = "0";
    secondOnes = "0";
    if (countDownTimer != null) {
        countDownTimer.cancel();
        countDownTimer = null;
    }
    setCountdownText();
    P1CountDownTimer.setVisibility(View.INVISIBLE);
    P2CountDownTimer.setVisibility(View.INVISIBLE);
}

编辑:

这也是相关的。这是我如何实例化定时器的第一步,然后再重新设置。从用户获取数据,并将其转换为毫秒以传递到计数下定时器:

代码语言:javascript
复制
private void resetTimer() {
    final TextView P1CountDownTimer = (TextView) findViewById(R.id.P1CountDownTimer);
    final TextView P2CountDownTimer = (TextView) findViewById(R.id.P2CountDownTimer);
    startTime = ((Tens * 60) + (Ones)) * 1000;
    timeRemaining = startTime;
    if (startTime > 0) {
        long remainder = startTime;
        minuteTens = df.format(startTime / 600000);
        remainder = remainder - (Integer.valueOf(minuteTens) * 600000);
        minuteOnes = df.format(remainder / 60000);
        remainder = remainder - (Integer.valueOf(minuteOnes) * 60000);
        secondTens = df.format(remainder / 10000);
        remainder = remainder - (Integer.valueOf(secondTens) * 10000);
        secondOnes = df.format(remainder / 1000);
        setCountdownText();
        P1CountDownTimer.setVisibility(View.VISIBLE);
        P2CountDownTimer.setVisibility(View.VISIBLE);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-09 02:39:38

使其工作的方法似乎是使您的定时器全局化,然后调用全局var上的cancel。

https://stackoverflow.com/a/27730328/1410671https://stackoverflow.com/a/23630959/1410671

我假设这些方法都在活动类中,在这种情况下,您将在活动类的顶部声明您的CountDownTimer

代码语言:javascript
复制
private CountDownTimer countDownTimer;

然后在后面的其他方法中引用它,如

代码语言:javascript
复制
countDownTimer = new CountDownTimer(startTime, interval) {...}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31307068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档