我在Android活动中使用了一些线程对象。但是当Activity on destroy时,这些线程不会停止。我的线程停止代码如下:
@Override
public void onDestroy() {
super.onDestroy();
thread.interrupt();
}
上面的代码不仅适用于线程对象停止,还会引发InterruptedException。在没有例外情况下停止正在运行的线程的正确方法是什么?
当线程对象抛出InterruptedException时,这不是错误吗?
答案 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();
。