2011-04-14 52 views
3

我想實現一個自動建議像我的應用程序的一部分功能。作爲其中的一部分,當用戶鍵入到文本字段中時,我爲結果ping Web服務,解析xml並使用返回結果列表更新列表視圖。安全的方法來停止線程 - Android

這是我的程序的基本流程。我的問題是如果我以正確的方式停止線程。調用thread.interrupt()是否足夠?

init() { 
    // <snip> 
    searchTxt.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void afterTextChanged(Editable arg0) { 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 
      FetchResults(); 
     }}); 
} 

private void FetchResults() 
{ 
    if(mCurrentNetworkThread != null) 
    { 
     mCurrentNetworkThread.interrupt(); 
     mCurrentNetworkThread = null; 
    } 
    mCurrentNetworkThread = new Thread(
      new Runnable() { 
       public void run() { 
        List<NameValuePair> paramTable = new ArrayList<NameValuePair>(1); 
        paramTable.add(new BasicNameValuePair("searchText", searchTxt.getText().toString())); 
        String methodName = "GetSearchResults"; 
        NetworkAccessClass nac = new NetworkAccessClass(paramTable, IP_ADDR, methodName, 0, this); 
        nac.startRequest(); 
       } 
      }); 
    mCurrentNetworkThread.start(); 
} 

@Override 
public void requestSucceeded(String responseMessage, int callID) { 
    parseResponseFromNetwork(responseMessage); 
} 

@Override 
public void requestFailed(String responseCode, int callID) { 

} 

回答

3

。這個簡單的方法我推薦使用AsyncTask。它解決了您在Android中遇到的任何問題。這些任務可以通過cancel()函數取消,並且就Android中的任何Threading異常而言都是安全的。

[編輯]

請務必檢查喬恩的評論如下有關使用裝載機,一個3.0的功能我不知道的。