在线程Android内停止计时器

时间:2012-04-13 19:37:19

标签: android multithreading timer

我有一个在线程中运行的Timer。这是代码:

timer = new Timer();
start_timer = new Thread(new Runnable() {
  public void run() {
    timer.schedule(new TimerTask() {

      @Override
      public void run() {
        myHandler.post(new Runnable() {
          public void run() {
            Log.e("asd", String.valueOf(tmp_chiamata_id)); 

            //do somethings

            Toast.makeText(getApplicationContext(), start_timer.getState().toString(), Toast.LENGTH_LONG).show();
          }
        });
      }
    }, 0, 1000);
  }
});
start_timer.start();

要停止计时器我写这个:

if(timer != null){
        timer.cancel();
        start_timer.interrupt();
}

问题是logcat停止显示asd但toast继续显示消息Interrupted。我也尝试用start_timer.stop()来停止线程,但它无论如何都没有用。我能怎么做? 谢谢,马蒂亚

2 个答案:

答案 0 :(得分:0)

使用处理程序和发送延迟消息更稳定,更容易

http://www.tutorialforandroid.com/2009/01/using-handler-in-android.html

答案 1 :(得分:0)

也许从timer对象调用purge()方法会有所帮助。正如文件所说,

“从任务队列中删除所有已取消的任务。如果没有其他任何关于任务的引用,则在此调用之后,它们可以自由地进行垃圾回收。”