Java 倒计时在后台继续计时-如何在onResume中检索该计数?

Java 倒计时在后台继续计时-如何在onResume中检索该计数?,java,android,countdowntimer,Java,Android,Countdowntimer,我有一个带有多个定时器的应用程序;当我启动一个时,我可以看到它在Eclipse的Logcat中倒计时 当我按下后退按钮时,应用程序中会调用onStop,但logcat中的计时器继续倒计时,onTick继续滴答作响 我想要的是,当onResume被调用时,我想要得到仍然在倒计时的计时器并继续它。这可能吗 以下是我开始倒计时的按钮: //Button1 Timer final CountDown button1 = new CountDown(420000,1000,bButton1); bButt

我有一个带有多个定时器的应用程序;当我启动一个时,我可以看到它在Eclipse的Logcat中倒计时

当我按下后退按钮时,应用程序中会调用onStop,但logcat中的计时器继续倒计时,onTick继续滴答作响

我想要的是,当onResume被调用时,我想要得到仍然在倒计时的计时器并继续它。这可能吗

以下是我开始倒计时的按钮:

//Button1 Timer
final CountDown button1 = new CountDown(420000,1000,bButton1);
bButton1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        button1.start();
        long currentTime = System.currentTimeMillis();
        //Set start time for calculating time elapsed if needed
        saveTime("START_TIME_BUTTON1", currentTime);
    }
});     

//Button2 Timer
final CountDown button2 = new CountDown(360000,1000,bButton2);
bButton2.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        button2.start();
        long currentTime = System.currentTimeMillis();
        //Set start time for calculating time elapsed if needed
        saveTime("START_TIME", currentTime);
    }
}); 
我的简历是这样的:

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();

    //Reset the timers on appropriate buttons if there was something running
    //If nothing was running or timer finished - have button in default state

    //See if there was a button1 timer running - if not, it will be 0
    SharedPreferences start = PreferenceManager.getDefaultSharedPreferences(this);
    long startTime = start.getLong("START_TIME_BUTTON1", 0);
    long timeElapsed = (System.currentTimeMillis()-startTime);
    long timeRemaining = (420000 - timeElapsed);        
    if (timeRemaining == 0) {
    } else if (timeRemaining > 0) {
        final CountDown button1Timer = new CountDown(timeRemaining,1000,bButton1);
        button1Timer.start();
        long currentTime = System.currentTimeMillis();
            saveTime("START_TIME", currentTime);            
    } else {
    }
}
这实际上是可行的-onResume在第一个计时器的位置启动另一个计时器,文本显示适当的数字,并使用onTick方法继续倒计时。但是现在logcat显示2个计时器倒计时,而不是一个

最终,我不想启动另一个计时器,我只想在当前正处于倒计时的位置拾取我启动的第一个计时器,并适当地显示onTick。有办法吗?我需要的是服务吗?它是否已经是一项服务,因为它在后台继续滴答作响

我有点搞不清楚什么是完成此操作的最佳实践。

单击将继续被调用,直到剩余时间达到0或您在倒计时上调用cancel。 因此,在onStop方法中,您需要在要停止接收onTick通知的计时器上调用cancel

Android的倒数计时器实现使用一个处理程序来执行计时,方法是在每次滴答声后将发送给处理程序的消息排队。不幸的是,没有办法暂停倒计时,因此我相信您需要创建一个具有适当值的新计时器,就像您当前所做的那样

在计算已用时间时,不应使用System.currentTimeMillis,因为它可以随时更改,而应使用SystemClock.elapsedRealtime。System.currentTimeMillis是用于挂钟时间和日期的计时器,因此可能会发生不可预测的变化,请参阅。

单击将继续被调用,直到剩余时间达到0或您在倒计时上调用cancel。 因此,在onStop方法中,您需要在要停止接收onTick通知的计时器上调用cancel

Android的倒数计时器实现使用一个处理程序来执行计时,方法是在每次滴答声后将发送给处理程序的消息排队。不幸的是,没有办法暂停倒计时,因此我相信您需要创建一个具有适当值的新计时器,就像您当前所做的那样


在计算已用时间时,不应使用System.currentTimeMillis,因为它可以随时更改,而应使用SystemClock.elapsedRealtime。System.currentTimeMillis是用于挂钟时间和日期的计时器,因此可能会发生不可预测的变化,请参阅。

谢谢。感谢您对这一点的关注——正如您可能从我的代码中想象的那样,我对这一点仍然非常陌生。只是想让它做我想做的!干杯还有,-非常愚蠢的问题,但是-我怎么称呼。取消;在那个计时器上?如果我按下按钮1.取消;进入onResume方法-它会中断。不知道怎么做…你的倒计时类会扩展倒计时吗?如果是这样的话,你能发布你得到的错误吗?我现在已经把它平方了:是的,我的倒计时类扩展了倒计时。感谢您的帮助和对SystemClock的建议!谢谢你,莫特。感谢您对这一点的关注——正如您可能从我的代码中想象的那样,我对这一点仍然非常陌生。只是想让它做我想做的!干杯还有,-非常愚蠢的问题,但是-我怎么称呼。取消;在那个计时器上?如果我按下按钮1.取消;进入onResume方法-它会中断。不知道怎么做…你的倒计时类会扩展倒计时吗?如果是这样的话,你能发布你得到的错误吗?我现在已经把它平方了:是的,我的倒计时类扩展了倒计时。感谢您的帮助和对SystemClock的建议!