Java On Pause、On Stop、onDestroy不停止计时器

Java On Pause、On Stop、onDestroy不停止计时器,java,android,timer,Java,Android,Timer,在活动中的onCreate方法中,我从一个对象调用一个方法,并将methods值传递为1,这意味着在objects类中启动计时器。但是,每当应用程序关闭、失去焦点或有人按下设备上的后退按钮并退出应用程序时,我想停止计时器。我尝试在onCreate方法下面使用onPause、onStop、onDestroy来执行此操作,并将对象的methods值输入为2,这意味着取消计时器。然而,我的问题是,每当有人按下设备上的后退按钮,然后返回到应用程序时,同一个计时器会运行两次,因为应用程序没有取消onSto

在活动中的onCreate方法中,我从一个对象调用一个方法,并将methods值传递为1,这意味着在objects类中启动计时器。但是,每当应用程序关闭、失去焦点或有人按下设备上的后退按钮并退出应用程序时,我想停止计时器。我尝试在onCreate方法下面使用onPause、onStop、onDestroy来执行此操作,并将对象的methods值输入为2,这意味着取消计时器。然而,我的问题是,每当有人按下设备上的后退按钮,然后返回到应用程序时,同一个计时器会运行两次,因为应用程序没有取消onStop、onPause或onDestroy中的计时器。为什么onStop、onPause和onDestroy没有停止计时器?我如何让它停止计时器,以便在应用程序重新打开时两个都不运行

下面的活动

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类中有一个bug。

我不明白,为什么您的计时器没有取消。但代码中还有另一个bug:您不能通过调用resume和start来暂停和恢复倒计时计时器

如果你的时间被取消了,你应该保留旧的时间。如果必须恢复计时器,可以使用旧的计时器值创建新计时器。见:

对于您的问题:您能否调试并检查是否调用了onPause、onStop和onDestroy?是否引发了任何异常?你有任何编译警告吗


最后一个重要问题:您如何知道两个计时器正在运行?

我已编辑了该问题并将其放入计时器类中。