[英]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.