2014-12-06 156 views
0

當我退出我的活動或應用程序時,無法停止此線程。無法停止android線程

public class MyThread extends Thread { 
     public Handler handler; 
     @Override 
     public void try{ 
       Looper.prepare(); 
       handler = new Handler(); 
       Looper.loop(); 
     } 
    } 
    ... 

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

final Runnable runnable = new Runnable() { 
     @Override 
     public void run(){ 
      doSomething(); 
      myThread.handler.postDelayed(this,30*1000); 
     } 
}; 
myThread.handler.post(runnable); 

@Override 
public void onStop(){  
     myThread.handler.removeCallbacksAndMessages(null); 
     myThread.handler.getLooper().quit(); 
     myThread = null;   
} 

我可以證實,所有的onStop()代碼運行,但仍logcat中顯示線程中運行後,我退出應用程序。

我認爲,即使我拆下電池,並用大錘粉碎設備它仍然會繼續運行,我已經嘗試了一切。 :〜)我一定會錯過一些關於處理程序,循環和線程的東西。請幫忙。

+1

看看這個鏈接: http://stackoverflow.com/questions/4756862/how-to-stop-a-thread – 2014-12-06 12:57:05

+0

嘗試分配空值主題 – 2014-12-06 12:57:41

+0

MyThread的= NULL也做不停止的事情,這是堅不可摧的 – aez 2014-12-06 14:42:39

回答

0

添加一個布爾標誌的活動,說「shouldThreadRun」中的onResume設置爲true(),以在onPause()

在運行的線程()設置爲false,請檢查活動是否仍然運行

if(shouldThreadRun){ 
    doSomething(); 
    myThread.handler.postDelayed(this,30*1000); 
} 
+0

謝謝帕特里克。我不確定這是怎麼可能的,但即使在我的onPause()中設置了shouldThreadRun = false,它仍然會繼續運行,並且我在該線程的run()中設置了一個斷點,並且我發現某種程度上應該是線程運行已被重置爲真實,我不知道這是可能的。我甚至宣稱它是不穩定的。 – aez 2014-12-06 18:34:56

+0

我也會問,那麼looper.quit()有什麼用?或removeCallbacksAndMessages()? – aez 2014-12-06 18:47:31

+0

嘗試阻止使用Looper和Handler,而不是使用AsyncTask進行後臺任務和UI交互。我保證異步任務可以通過標誌停止。 – 2014-12-07 03:24:04