簡體   English   中英

當 Activity 在 Android 上銷毀時如何停止正在運行的線程?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM