在AsyncTask中,ProgressDialog不显示的问题通常是由于UI线程被阻塞导致的。以下是一种解决方法:
private class MyTask extends AsyncTask {
private ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("Loading...");
progressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
// 执行耗时操作
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
}
private class MyTask extends AsyncTask {
private ProgressDialog progressDialog;
private Handler handler;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("Loading...");
progressDialog.show();
handler = new Handler();
}
@Override
protected Void doInBackground(Void... params) {
// 执行耗时操作
// 发送消息给Handler
handler.sendEmptyMessage(0);
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
}
在Activity中,需要添加消息处理的代码:
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
// 显示或关闭ProgressDialog
break;
}
}
};
这样就能确保ProgressDialog在AsyncTask执行期间正常显示了。
上一篇:AsyncTask中GET方法的目的是什么?它是否会阻塞线程?
下一篇:AsyncTask、AsyncTaskLoader或者带有ViewModel、LiveData和Room的Executer?