2011-10-04 69 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,取消将被阻止,直到后台任务(线程)正常结束。