
[英]Calling onPause(), onStop, and onDestroy from a button listner
[英]onPause, onStop, onDestroy not stopping timer
在我的活动的onCreate方法中,我从对象中调用一个方法,并将方法值传递为1,这意味着要在对象类中启动计时器。 但是,我想在应用程序关闭,失去焦点或有人按下设备上的后退按钮并退出应用程序时停止计时器。 我尝试在具有onPause,onStop,onDestroy的onCreate方法下面执行此操作,然后为该对象输入方法值2,这意味着取消计时器。 但是我的问题是,每当有人按下设备上的“后退”按钮然后返回到应用程序时,同一计时器就会运行两次,因为该应用程序并未取消onStop,onPause或onDestroy中的计时器。 为什么onStop,onPause和onDestroy没有停止计时器,我如何使它停止计时器,以便在重新打开应用程序时运行两个arent?
以下活动
Ship mShip = new Ship(0,0,0);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
mShip.timerStart(1);
}
@Override
public void onPause()
{
super.onPause();
mShip.timerStart(2);
}
@Override
public void onStop()
{
super.onStop();
mShip.timerStart(2);
}
@Override
public void onDestroy()
{
super.onDestroy();
mShip.timerStart(2);
}
下面的船级
public static int counter = 0;
public static int counterPerSec = 5;
TimerClass startTimer = (TimerClass) new TimerClass(2000,1000)
{
@Override
public void onFinish() {
counter += counterPerSec;
this.start();
}
};
public void timerStart(int x) {
if(x == 1)
{
startTimer.start();
}
if(x == 2)
{
startTimer.cancel();
}
}
计时器类
public class TimerClass extends CountDownTimer {
public TimerClass(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override // when timer is finished
public void onFinish() {
this.start();
}
@Override // on every tick of the timer
public void onTick(long millisUntilFinished) {
}
}
好吧,我想我可以正确地假设onPause,onStop和onDestroy正在执行,因此我敢猜测您的TimerClass类中存在错误。
我看不到,为什么您的计时器没有取消。 但是您的代码中还有另一个错误:您无法通过调用恢复和开始来暂停和恢复倒数计时器。
如果您的时间被取消,则应保存旧的计时器值。 而且,如果必须恢复计时器,则可以使用旧的计时器值创建一个新的计时器。 请参阅: Android:如何暂停和恢复倒数计时器?
对您的问题:是否可以调试并检查是否调用了onPause,onStop,onDestroy? 是否有引发任何异常? 您有任何编译警告吗?
最后一个重要问题:您如何知道两个计时器正在运行?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.