2014-10-20 93 views
0

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

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(); 
     } 

    } 

Timer类

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) { 



} 

}

活动下

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); 
} 

船级

回答

0

我看不到,为什么你的计时器没有被取消。但是你的代码中还有一个bug:你不能通过调用resume和start来暂停和恢复倒数计时器。

如果您的时间被取消,您应该保存旧的计时器值。如果您的定时器必须恢复,您可以使用旧的定时器值创建一个新的定时器。请参阅:Android: How to pause and resume a Count Down Timer?

对于您的问题:您可以调试并检查onPause,onStop,onDestroy是否被调用?有没有抛出异常?你有没有编译警告?

最后一个重要问题:你怎么知道两个定时器正在运行?

0

嗯,我想我可以正确地假设的onPause,的onStop,和o nDestroy正在执行,所以我敢冒险猜测TimerClass类中存在一个错误。

+0

我编辑了这个问题,并把我的计时器课。 – Xetron 2014-10-20 19:22:27