2011-10-04 38 views
1

我有兩個線程一個用於下載和其他用於顯示數據存在佈局的取消按鈕我希望當我點擊取消按鈕下載線程停止我怎麼能做到這一點取消正在進行的操作

final Thread parseThread=new Thread(new Runnable() { 
    public void run() 
    { 
     count=1; 
     searchResult.clear(); 
     Log.v("url","++"+"http://wap.vinmonopolet.no/vareutvalg/sok?query="+v.getText()); 
     Log.v("searchText","searchText "+ v.getText()); 
     downloader("http://wap.vinmonopolet.no/vareutvalg/sok?query="+v.getText()); 

     //if(msearchCancel) 
    } 
}); 
parseThread.start(); 


Thread displayThread = new Thread(new Runnable() { 
    public void run() { 
     try { 
      if(msearchCancel) 
       parseThread.interrupt(); 
      else 
       parseThread.join(); 
     } 
     catch (InterruptedException e) 
     { 
      e.printStackTrace(); 
     } 
     mHandler.post(new Runnable() { 
      public void run() 
      { 
       list_ed=new EfficientAdapter(getApplicationContext()); 
       searchList.setAdapter(list_ed); 
       progress_waiting1.setVisibility(ProgressBar.GONE); 
      } 
     }); 
    } 
}); 
displayThread.start(); 

回答

0

首先,在自己的線程中使用AsyncTask來處理任務,這很容易,併爲你處理一些低級別的東西。

然後,在您的線程(或AsyncTask中的後臺任務)中,您需要定期檢查主線程請求是否取消。在AsyncTask中,它是isCancelled方法。

如果您檢測到取消請求,則儘快退出線程的功能,以便線程可以關閉。否則,如果是AsyncTask.cancel,取消將被阻止,直到後臺任務(線程)正常結束。