Android 为什么';在onPostExecute()中使用以下代码调用progressDialog.Dislose()是否正常工作?
这取决于调用progressDialog.show()的位置 如果我像下面的代码那样调用它,对话框将关闭Android 为什么';在onPostExecute()中使用以下代码调用progressDialog.Dislose()是否正常工作?,android,Android,这取决于调用progressDialog.show()的位置 如果我像下面的代码那样调用它,对话框将关闭 /** AsyncTask **/ @Override protected void onPreExecute() { mProgressDialog.setMax(MAX_VALUE); mProgressDialog.setProgress(0); mProgressDialog.show(); } @Override protected void onPos
/** 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线程上的对话框。但是第一个有效,第二个无效
任何知道它的不同之处的人?
mProgressDialog
似乎只在代码中的onPreExecute()中初始化。。那么你得到NPE了吗?你能粘贴整个代码吗?其中是mProgressDialog.show();从@ADM调用,没有NPE。对话框不仅仅是关闭的。@user3783123 K,然后我将根据您的疑问对其进行编辑。您能解释一下第二部分是如何相互关联的吗?他们是不是在互相打电话?