Android 为什么AsyncTask会阻塞UI线程?

Android 为什么AsyncTask会阻塞UI线程?,android,android-asynctask,Android,Android Asynctask,为什么我的AsyncTask会阻止UI线程 在异步任务发生时,我的应用程序变得无响应 这在UI线程中调用: new AsyncFetch().execute(); 这是我的AsyncTask类: class AsyncFetch extends AsyncTask<Void, Void, String> { @Override protected String doInBackground(Void... args) { String data =

为什么我的AsyncTask会阻止UI线程

在异步任务发生时,我的应用程序变得无响应

这在UI线程中调用:

new AsyncFetch().execute();
这是我的AsyncTask类:

class AsyncFetch extends AsyncTask<Void, Void, String> {

    @Override
    protected String doInBackground(Void... args) {
        String data = null;
        try {
            data = DataHandler.httpFetch(DataHandler.API_URL);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return data;
    }

    protected void onPostExecute(String data) {
        DataHandler.AsyncFetchResult(data);
    }

}
类AsyncFetch扩展了AsyncTask{
@凌驾
受保护字符串doInBackground(无效…参数){
字符串数据=null;
试一试{
data=DataHandler.httpFetch(DataHandler.API\uURL);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回数据;
}
受保护的void onPostExecute(字符串数据){
DataHandler.AsyncFetchResult(数据);
}
}


onPostExecute
在UI线程上运行。避免在这里做太多的工作。在
doInBackground
中完成繁重的工作,然后在UI线程上运行的
onPostExecute
onPostExecute
中更新UI(或任何需要执行的操作)。避免在这里做太多的工作。在
doInBackground
中完成繁重的工作,然后在UI线程上运行的
onPostExecute
onPostExecute
中更新UI(或任何需要执行的操作)。避免在这里做太多的工作。在
doInBackground
中完成繁重的工作,然后在UI线程上运行的
onPostExecute
onPostExecute
中更新UI(或任何需要执行的操作)。避免在这里做太多的工作。在
doInBackground
中完成繁重的工作,然后在
onPostExecute

中更新UI(或任何您需要做的事情),这可能就是问题所在。DataHandler.AsyncFetchResult(data);。。。显示它的代码嗯,你是对的。让我做一些测试。该方法将数据保存到缓存并对其进行分析。它包含什么DataHandler.AsyncFetchResult方法?记住..onPostExecute在ui线程上运行。这就是为什么它会阻止您的ui。您不执行下面的调用“new AsyncFetch().execute().get();”这是阻塞。当心“.get()”。这可能就是问题所在。DataHandler.AsyncFetchResult(数据);。。。显示它的代码嗯,你是对的。让我做一些测试。该方法将数据保存到缓存并对其进行分析。它包含什么DataHandler.AsyncFetchResult方法?记住..onPostExecute在ui线程上运行。这就是为什么它会阻止您的ui。您不执行下面的调用“new AsyncFetch().execute().get();”这是阻塞。当心“.get()”。这可能就是问题所在。DataHandler.AsyncFetchResult(数据);。。。显示它的代码嗯,你是对的。让我做一些测试。该方法将数据保存到缓存并对其进行分析。它包含什么DataHandler.AsyncFetchResult方法?记住..onPostExecute在ui线程上运行。这就是为什么它会阻止您的ui。您不执行下面的调用“new AsyncFetch().execute().get();”这是阻塞。当心“.get()”。这可能就是问题所在。DataHandler.AsyncFetchResult(数据);。。。显示它的代码嗯,你是对的。让我做一些测试。该方法将数据保存到缓存并对其进行分析。它包含什么DataHandler.AsyncFetchResult方法?记住..onPostExecute在ui线程上运行。这就是为什么它会阻止您的ui。您不执行下面的调用“new AsyncFetch().execute().get();”这是阻塞。小心“.get()”。