当我按下后退按钮时,我的计时器仍在运行。
对于停止线程我尝试: onDestroy()中的interput(),onPause()和onBackPressed()不起作用,我崩溃了
无法使用并看到?!取消()(在像我这样的一些问题中说使用取消()但不知道为什么我不能看到我按“myThread。”的时候。?)
我也尝试循环时不正确的条件,但没有解决我的问题。 (与之前的方式有一点不同,按下按钮后我看到崩溃我的应用程序!)
这是我写的代码:
counterTime = 11;
while (counterTime > 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
counterTime--;
if (txtTimer != null) {
G.HANDLER.post(new Runnable() {
@Override
public void run() {
int min = (int) Math.floor(counterTime / 60);
int sec = counterTime % 60;
String secPerfix = "";
if (sec < 10) {
secPerfix = "0";
}
txtTimer.setText(min + ":" + secPerfix + sec);
}
});
}
}
private synchronized void stopThread() {
if (threadTimer != null){
threadTimer.interrupt();
}
}
@Override
public void onBackPressed() {
stopThread();
super.onBackPressed();
}
感谢。
答案 0 :(得分:2)
试试这个
counterTime = 11;
Timer timer = new Timer();
TimerTask timertask = new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (counterTime > 0) {
counterTime--;
if (txtTimer != null) {
int min = (int) Math.floor(counterTime / 60);
int sec = counterTime % 60;
String secPerfix = "";
if (sec < 10) {
secPerfix = "0";
}
txtTimer.setText(min + ":" + secPerfix + sec);
}
}
}
});
}
};
timer.scheduleAtFixedRate(timertask, 0, 1000);
并且背面按下
@Override
public void onBackPressed() {
if(timertask!=null){
timertask.cancel();
timertask = null;
}
if(timer!=null){
timer.cancel();
timer = null;
}
super.onBackPressed();
}
答案 1 :(得分:1)
您的代码看起来不错。当你调用stopThread时发送一个interruptionException,但是你没有打破while循环。这样做:
catch (InterruptedException e) {
e.printStackTrace();
//break out of the while loop and end gracefully
break;
}