当用户按下后退按钮时停止线程

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

文档
1. Timer
2.TimerTask