Java 倒计时在后台继续计时-如何在onResume中检索该计数?
我有一个带有多个定时器的应用程序;当我启动一个时,我可以看到它在Eclipse的Logcat中倒计时 当我按下后退按钮时,应用程序中会调用onStop,但logcat中的计时器继续倒计时,onTick继续滴答作响 我想要的是,当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
//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的建议!