AsyncTask ProgressDialog没有显示。获取()
-
11-12-2019 - |
题
我用的是 AsyncTask
子类进行一些后台处理。问题是,当我使用的类与 .get()
方法,该 ProgressDialog
我在指定 onPreExecute()
不显示。
如果我使用带有 onPostExecute()
方法。
我的第一个想法是,这是因为 .get()
等待进程完成,但不能阻塞UI线程,所以情况并非如此。
任何人都可以解释为什么这种行为是如此,如果有解决方法??我真的很想用 .get()
方法,如果我可以。
解决方案
我最初接受了另一个答案,但似乎是错误的。
该 .get()
方法将阻止UI线程等待结果,并且显示的任何对话框也将被阻止。这是此方法的预期行为。
唯一的选择是不使用 .get()
如果后台活动是任何明显的时间量,而是使用回调方法调用活动。
其他提示
打电话来 AysncTask.获取() 在UI线程上会阻塞UI线程执行并使UI线程等待AysncTask。doInBackground()完成。通过这样做,你实际上牺牲了AsycnTask的好处,现在所有代码都在UI线程和后台线程中同步执行(仍然是两个线程,但UI线程现在等待后台线程)。
另外请记住,您可能会通过在UI线程上调用get()来获得ANR异常(阻止超过5秒)。
如果你真的必须使用它,请在myAsyncTask之前调用你的showDialog()方法。获取():
showDialog();
myAsyncTask.execute();
myAsyncTask.get(); // <-- UI thread blocked and wait at this point.
dismissDialog();// <-- This line will be executed after doInBackground() finish.
希望这有帮助。
不隶属于 StackOverflow