我在AsyncTask完成时忽略了进度对话框。在解雇之前我应该检查isShowing吗?
我已经尝试删除此检查并且它正常工作,但可能有隐藏的陷阱?
if (progressDialog.isShowing()) {
progressDialog.dismiss();
}
答案 0 :(得分:9)
你不应该检查isShowing是否解雇它。如果你没有检查isShowing它会忽略dismiss()是进度条没有显示。
但是检查isShowing是一个很好的做法。所以继续检查它不会有什么坏处。
答案 1 :(得分:2)
似乎在实现中检查了:
public void dismiss() {
if (Thread.currentThread() != mUiThread) {
mHandler.post(mDismissAction);
} else {
mDismissAction.run();
}
}
private void dismissDialog() {
if (mDecor == null || !mShowing) {
return;
}
try {
mWindowManager.removeView(mDecor);
} finally {
mDecor = null;
mWindow.closeAllPanels();
onStop();
mShowing = false;
sendDismissMessage();
}
}
答案 2 :(得分:0)
如果您的代码中只有一个位置调用了dismiss()
,那么没有。您应该知道当时是否显示对话框。
然而,我遇到了ProgressDialogs和方向更改的一些问题,这导致需要有多个可能会被解除对话的地方,因此需要进行isShowing()
检查。
答案 3 :(得分:0)
检查source code,如果是在代码中处理,则无需担心。如果不进行处理,您可以选择创建风险更高但速度更快但安全性更低的环境。