如何在Android中的Activity ondestroy时停止正在运行的线程?

时间:2012-05-11 02:09:58

标签: android

我在Android活动中使用了一些线程对象。但是当Activity on destroy时,这些线程不会停止。我的线程停止代码如下:

@Override
public void onDestroy() {
    super.onDestroy();
    thread.interrupt();
}

上面的代码不仅适用于线程对象停止,还会引发InterruptedException。在没有例外情况下停止正在运行的线程的正确方法是什么?


当线程对象抛出InterruptedException时,这不是错误吗?

5 个答案:

答案 0 :(得分:2)

尝试这种方式:

volatile boolean stop = false;

public void run() {
    while ( !stop ) {
     log.v("Thread", "Thread running..." );
      try {
      Thread.sleep( 1000 );
      } catch ( InterruptedException e ) {
      log.v("Thread","Thread interrupted..." );
      }
    }
}

@Override
public void onDestroy() {
    stop = true;
    super.onDestroy();

}

@Override
public void onDestroy() {
    thread.interrupt();
    super.onDestroy();   
}

答案 1 :(得分:0)

试图从外面阻止线程是不可靠的。

我建议在您的应用中使用SharePreferences或应用上下文(例如IS_APP_ACTIVE)使用全局参数  并让线程自杀。

让我试着解释一下......

在你的活动中

protected void onResume() {
        super.onResume();

// isAppActive
        CommonUtils.setAppActive(mContext, true);
}

protected void onPause() {
        super.onPause();

// isAppActive
        CommonUtils.setAppActive(mContext, true);
}
你线程中的

if ( !CommonUtils.isAppActive(mContext) )

离开线程循环。

答案 2 :(得分:0)

我这样做。 在您的活动中

@Override
public void onDestroy() {
    super.onDestroy();
    thread.interrupt();
}
你的主题

中的

@Override
public void run() {
    // stop your thread
    if (interrupted()) {
        return;
    }
    // do your work
}

答案 3 :(得分:-1)

我们无法杀死一个线程。唯一的方法是:

class MyThread extends Thread
     {
      void run()
      {
     while(bool){
           //My code which takes time.
      }
     }
     }

// --------------------------运行线程

  MyThread mThread = new MyThread();
   mThread.start();

现在,当你想要停止线程时......只需将bool值更改为false

bool=false;

答案 4 :(得分:-2)

当调用onDestroy()或其他任何内容(例如按下按钮)时,添加finish();应该结束Activity。使用onDestroy()时,请确保在调用其他所有内容后放置super.onDestroy();