2011-04-14 31 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的功能我不知道的。