我正在尝试使用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
}
答案 0 :(得分:9)
这是因为get()
AsyncTask
方法等待计算在doInBackground
方法中完成,然后检索其结果。见link。
这将使您的主UIThread
处于等待模式,直到doInBackground
完成执行或发生一些异常(即CancellationException
,ExecutionException
和InterruptedException
)。
您应该使用onPostExecute(Result)
的{{1}}覆盖方法。
AsyncTask