繁体   English   中英

等待HTTP响应时Android UI冻结

[英]Android UI freeze while waiting for a http response

当我通过我的应用发送http请求时,我在等待http响应时,应用的UI会冻结。

为什么会这样呢?

async void HttpAction()
    {
        var request = HttpWebRequest.Create(url);
        request.Method = "GET";
        request.Timeout = 1500;

        await Task.Delay(500);

        using (HttpWebResponse reponse = request.GetResponse() as HttpWebResponse)
            {

                if (reponse.StatusCode == HttpStatusCode.OK)
                {
                    //UI action
                    reponse.Close();
                }
    }

非常感谢!

您需要在调用点等待HttpAction方法。 首先阅读这篇异步/等待文章,以更好地理解异步编程。

异步任务内部不应有任何UI操作,而应将结果返回到调用点,然后执行必要的操作。

async Task<bool> GetHttpAsyncStatus()
{
    var request = HttpWebRequest.Create(url);
    request.Method = "GET";
    request.Timeout = 1500;

    using (HttpWebResponse reponse = await request.GetResponseAsync() as HttpWebResponse)
    {
        if (reponse.StatusCode == HttpStatusCode.OK)
        {
            // no UI Action, just return the result
            reponse.Close();
            return true;
        }
        return false;
     }
}

这必须作为

bool requestStatus = await GetHttpAsyncStatus();

您需要使用AsyncTask并在doInBackground方法中运行http调用。 onPostExecute方法中,您将更新ui。 AsyncTask不会非常麻烦,它将释放ui线程。 我在异步方面没有太多经验,但是AsyncTask和HttpurlConnection从未使我在更棘手的问题上失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM