android - 为什么使用以下代码在 onPostExecute() 中调用 progressDialog.dismiss() 不能正常工作?
问题描述
这取决于我在哪里调用progressDialog.show()。
如果我像下面的代码那样调用它,对话框将被关闭。
/** AsyncTask **/
@Override
protected void onPreExecute() {
mProgressDialog.setMax(MAX_VALUE);
mProgressDialog.setProgress(0);
mProgressDialog.show();
}
@Override
protected void onPostExecute(Object o) {
mProgressDialog.dismiss(); // it works!!
super.onPostExecute(o);
}
但是如果我使用下面的代码,它就不起作用。
我的意思是对话框没有关闭。
/** A.java **/
private DownloadListener mDownloadListener = new DownloadListener() {
@Override
public void onCompleted() {
Handler handler = new Handler(Looper.getMainLooper());
...
} else {
handler.postDelayed(new Runnable() {
@Override
public void run() {
mDecompressor.initialize(mContext, mDecompressListener);
}
}, 0);
}
}
};
/** B.java **/
public void initialize(final Context context,
final DecompressListener listener) {
if(initialized(context)) return;
showProgressBar(context);
...
mUnzipTask = new UnzipTask(context, mProgressDialog, listener, dirPath, filePath);
mUnzipTask.execute();
}
private void showProgressBar(final Context context) {
mProgressDialog = new ProgressDialog(context);
...
mProgressDialog.show();
}
/** AsyncTask **/
@Override
protected void onPostExecute(Object o) {
mProgressDialog.dismiss(); // it doesn't work (Dialog isn't closed)
super.onPostExecute(o);
}
我很困惑,因为这两种情况也会打开 UI 线程上的对话框。
但是第一个有效,第二个无效。
谁知道它有什么不同?
解决方案
推荐阅读
- python - Django 如何在不刷新或重新加载页面的情况下插入数据
- java - 在单选按钮可绘制的左侧添加填充
- python - 如何使用列表理解创建三角形列表?
- multithreading - 仅扫描新文件并下载而不是将其上传到其他地方的程序上的多线程
- javascript - 我正在尝试从数组中更改每个项目的“值”,但每次发生此错误时“无法设置未定义的属性'innerHTML'”
- java - 是否有一种标准方法来验证数组中多个项目之间的约束?
- powershell - 在“域控制器”上找不到对象“用户”
- arrays - Excel 中的 CountIF 与标准的可变范围
- django - Django通过谷歌地图的位置实现搜索
- angular - else 条件没有被测试覆盖覆盖