在Android上销毁时,如何停止正在运行的线程?

在Android上销毁时,如何停止正在运行的线程?,android,Android,我在Android活动中使用了一些线程对象。但这些线程在销毁上的活动时不会自行停止。我的线程停止代码如下所示: @Override public void onDestroy() { super.onDestroy(); thread.interrupt(); } 上面的代码不仅用于停止线程对象,而且还引发InterruptedException。在没有异常的情况下停止正在运行的线程的正确方法是什么 线程对象抛出InterruptedException时不是错误吗?添加fin

我在Android活动中使用了一些线程对象。但这些线程在销毁上的活动时不会自行停止。我的线程停止代码如下所示:

@Override
public void onDestroy() {
    super.onDestroy();
    thread.interrupt();
}
上面的代码不仅用于停止线程对象,而且还引发InterruptedException。在没有异常的情况下停止正在运行的线程的正确方法是什么


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

添加
finish()应结束活动。使用onDestroy()时,请确保
super.onDestroy()放在调用其他所有内容之后。

请尝试以下方法:

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

}


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

我建议在应用程序中使用全局参数,使用SharePreferences或应用程序上下文(例如,应用程序是否处于活动状态)
让线自毁

让我试着解释一下

在你的活动中

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

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

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

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

if ( !CommonUtils.isAppActive(mContext) )
只要退出线程循环。

我就是这样执行的。 在你的活动中

@Override
public void onDestroy() {
    super.onDestroy();
    thread.interrupt();
}
在你的线程中

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

您好,在我添加finish()函数调用后,它一直抛出InterruptedException。我应该在我的Runnable类中重写某个方法吗??顺便说一句,我没有点击-1按钮来回复这个:那么,当thread对象抛出InterruptedException时不是一个错误吗?
@Override
public void run() {
    // stop your thread
    if (interrupted()) {
        return;
    }
    // do your work
}