AsyncTask有什么问题吗?

时间:2012-09-17 11:31:25

标签: android

@Override 
protected InputStream doInBackground(String... url){                
    try {
        InputStream stream = downloadXml(url[0]);
        new ParseXml(stream); //for testing porpuses: outputs ok to logcat
        return stream;
    } catch (IOException e) {
        Log.d("dbg","exception");   
        e.printStackTrace();
        return null;
    }   
}

@Override 
protected void onPostExecute(InputStream result) {
    if (result != null) {    
       new ParseXml(result); //crashes the app                  
    }
    Log.d("dbg","postexecute triggered ok");        
}

代码是非常自我解释我认为,我尝试将传递类型更改为只是对象并在需要的地方输入类型,但它也没有用。

在我应该知道的sdk中有没有未记载的内容吗?

1 个答案:

答案 0 :(得分:1)

显然,Crash ..你在 MainUI线程中做了很长时间(也可能是与网络相关的)操作。仅作为 AsyncTask onPostExecute()仅在MainUI Thread中运行。所以请始终将其保留在doInBackground()中。

此代码行new ParseXml(result);应位于 AsyncTask doInBackground()中。

更新:

完成doInBackground()中的XML解析,只传递onPostExecute()中的结果,只要您想反映应用程序UI上的更新。