使用AsyncTask的doInBackground()内的OkHttp库发出HTTP请求会阻止UI操作

时间:2016-07-06 06:01:04

标签: android okhttp

我正在尝试使用call.execute() - 同步调用在AsyncTask中发出OkHttp请求。

我的布局中有两个按钮。按下按钮1启动AsyncTask,执行OkHttp request.call.execute()。

按下按钮2,我只需更新TextView。

观察:AsyncTask正在运行时,我无法更新TextView。

但是,如果我不使用AsyncTask并使用OkHttpClient.newCall()。enqueue()方法,那么我可以通过按button2来更新TextView。

“为什么在这种情况下使用AsyncTask无法正常工作”的答案?

源代码示例:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
    return touch.view == gestureRecognizer.view
}

1 个答案:

答案 0 :(得分:9)

这是因为get() AsyncTask方法等待计算在doInBackground方法中完成,然后检索其结果。见link

这将使您的主UIThread处于等待模式,直到doInBackground完成执行或发生一些异常(即CancellationExceptionExecutionExceptionInterruptedException )。

您应该使用onPostExecute(Result)的{​​{1}}覆盖方法。

AsyncTask