当用户按下后退按钮时停止线程
Stop Thread when user press the back button
当我按下后退按钮时,我的计时器仍然是 运行。
为了停止线程,我尝试:
onDestroy()、onPause() 和 onBackPressed() 中的 interput() 不起作用,我崩溃了
不能用看看?! cancel() (在像我这样的一些问题中说使用 Cancel() 但不知道为什么我按 "myThread.?" 时看不到)
我也尝试在 while 循环中设置不正确的条件,但没有解决我的问题。 (与以前的方式有一个区别,在按下后退按钮后我看到我的应用程序崩溃了!)
这是我写的代码:
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();
}
谢谢。
您的代码看起来还不错。当您调用 stop Thread 时,您发送了一个 interruptedException 但您没有打破 while 循环。这样做:
catch (InterruptedException e) {
e.printStackTrace();
//break out of the while loop and end gracefully
break;
}
试试这个
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();
}
当我按下后退按钮时,我的计时器仍然是 运行。
为了停止线程,我尝试: onDestroy()、onPause() 和 onBackPressed() 中的 interput() 不起作用,我崩溃了
不能用看看?! cancel() (在像我这样的一些问题中说使用 Cancel() 但不知道为什么我按 "myThread.?" 时看不到)
我也尝试在 while 循环中设置不正确的条件,但没有解决我的问题。 (与以前的方式有一个区别,在按下后退按钮后我看到我的应用程序崩溃了!)
这是我写的代码:
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();
}
谢谢。
您的代码看起来还不错。当您调用 stop Thread 时,您发送了一个 interruptedException 但您没有打破 while 循环。这样做:
catch (InterruptedException e) {
e.printStackTrace();
//break out of the while loop and end gracefully
break;
}
试试这个
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();
}