[英]How to stop a running thread when Activity on destroy at Android?
我在我的 Android 活動中使用了一些線程對象。 但是這些線程在 Activity 銷毀時不會自行停止。 我的線程停止代碼如下:
@Override
public void onDestroy() {
super.onDestroy();
thread.interrupt();
}
上面的代碼不僅適用於線程對象停止,而且還會引發 InterruptedException。 無異常地停止正在運行的線程的正確方法是什么?
當線程對象拋出 InterruptedException 時,這不是錯誤嗎?
試試這個方法:
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();
}
試圖從外部停止線程是不可靠的。
我建議在您的應用程序中使用 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) )
剛剛退出線程循環。
我是這樣執行的。 在您的活動中
@Override
public void onDestroy() {
super.onDestroy();
thread.interrupt();
}
在你的主題中
@Override
public void run() {
// stop your thread
if (interrupted()) {
return;
}
// do your work
}
我們無法殺死線程。 唯一的方法是:
class MyThread extends Thread
{
void run()
{
while(bool){
//My code which takes time.
}
}
}
// --------------------------運行線程
MyThread mThread = new MyThread();
mThread.start();
現在,當您要停止線程時...只需將bool值更改為false
。
bool=false;
添加finish();
當 onDestroy() 或其他任何東西(例如按下按鈕)被調用時,應該結束活動。 當您使用 onDestroy() 時,請確保super.onDestroy();
放在調用其他所有內容之后。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.