我正在使用
以同步方式拨打电话的应用class HttpUtil extends AsyncTask<Void,Void,String>
{...}
HttpUtil httpUtil = new HttpUtil();
httpUtil.execute((Void[]) null).get();
这将调用AsyncTask方法。
问题:
由于我们执行了UI阻止请求,因此UI中未显示旋转轮。即使我添加了一个toast,然后在请求完成后显示toast。
如果我进行异步调用,那么我会在UI未被阻止的情况下获得旋转轮
预期:
我还需要为阻止的请求显示一个旋转轮(完成添加get()方法)。
答案 0 :(得分:1)
不要在网络操作中使用get()
。只是不要。您的应用程序将冻结,或者被系统杀死,或者用户会因为您的应用阻止系统的整个用户界面而感到沮丧。这绝对是不可接受的,并且没有理由为什么精心设计的应用程序应该诉诸于此。
您在AsyncTask
onPreExecute()
中启用了不确定的进度,并在onPostExecute()
中将其关闭。这两种方法总是在UI威胁上运行。请参阅documentation for AsyncTask。
此外,您不需要将Void[] null
传递给execute()
来电 - 只需传递任何内容,这将导致空数组空。
如果任何其他操作或UI更新取决于请求的结果,请在onPostExecute
中执行这些更新。如果你想创建模态基本上&#34;停止&#34;请求运行时的UI,然后显示一个对话框,但请提供取消选项。