2012-11-09 34 views
5

我想殺死一個特定的線程,但無法弄清楚它的工作方式。 我接下來包括所有信息,即使它看起來並不重要:android殺死操作欄上的特定線程事件

我使用操作欄sherlock並希望殺死操作按鈕事件上的線程。所以,我有:

Thread myThread; 
    myThread = new Thread(new Runnable(){ 
     public void run(){ 
       functionX(); 
     } 
     }); 
    myThread.start(); 

此線程是一個長時間運行的線程,funcionX()也創建一些新線程。 我想,當殺死線程:

public boolean onOptionsItemSelected(MenuItem item){ 
    switch (item.getItemId()) { 

    case android.R.id.home: 
     myThread.interrupt(); 
     break; 
    }; 

我試着ExecutorService的使用提出(可運行),爲未來的結果和Future.cancel但似乎並不工作。 我還應該提到functionX()使用http get請求從JSON服務中獲取數據。

回答

4

有多種方法可以做到這一點,他們夫婦可以像

  1. 相反線程中使用的TimerTask和調用timeTask.cancel() - 打斷
  2. 在的run()方法線程,不斷檢查一個布爾值,以確定線程是否應該被終止,然後你可以調用中斷或更好地拋出異常
+0

+1。建議2是我會用的。如果你正在快速循環一個線程,只需將它包含在頂層,否則通過代碼有幾個。在處理飢餓的部分之前。 – Doomsknight

+0

謝謝。我會用技巧2去。 –