我正在製作一個Android應用程序,可在用戶指定的時間間隔後開啓/關閉閃光燈。除非在第二次調用.cancel()方法之後重新創建Timer對象,否則它每次都會崩潰應用程序。 這裏的初始化部分:如何在取消它之後重新創建Timer類對象?
Timer timer; //variable of Timer class
TimerTask timerTask; //variable of TimerTask class
而這裏的方法,該方法被調用時負責按鈕打開閃爍開/關被壓:從上面的代碼
blink.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
delay = Integer.valueOf(startDelay.getText().toString());
gap = Integer.valueOf(blinkDelay.getText().toString());
if(!isBlinking) { //isBlinking is a boolean to know whether to stop or re-start timer
timer = new Timer(); //I'm creating an object of Timer class every time.
isBlinking = true;
timer.schedule(timerTask, delay, gap);
}
else{
isBlinking = false;
stoptimertask(); //this will cancel the 'timer' and make it null.
}
}
});
在「stoptimertask()」方法有:
public void stoptimertask() {
//stop the timer, if it's not already null
if (timer != null) {
timer.cancel();
timer = null;
}
}
我從下面顯示的方法設置TimerTask類的'timertask'變量。這就是所謂的主要活動的onCreate()方法:
public void initializeTimerTask() {
timerTask = new TimerTask() { //This is passed as the first argument to the timer.schedule() method
public void run() {//Basically turns on/off flash. Works well.
if(!state) {
turnOnFlash();
state = true;
}
else {
turnOffFlash();
state = false;
}
}
};
我的問題是,爲什麼當我按下按鈕閃爍第三次該應用是否會崩潰?
- 第一次按下時,isBlinking爲false,因此if塊執行創建Timer類的新對象並啓動計時器。
- 第二次按下時,會調用stoptimertask()來取消定時器並將timer變量設置爲null。
- 當第三次再次按下延遲和間隔的不同值時,應該創建一個Timer類的新對象,但應用程序意外崩潰,並顯示「不幸的是應用程序已停止」錯誤。 我哪裏錯了?
只是嘗試添加'timer.purge() '但應用程序仍像以前一樣崩潰。 –
@e_cobra在這種情況下,您可以使用scheduleAtFixedRate http:// stackoverflow。com/questions/1877417 /如何設置定時器在android/10101190#10101190 – SkyWalker
@e_cobra我已更新我的答案。請檢查 – SkyWalker