Android Java开发中如何设置ProgressDialog的显示时长
Android Java 实现ProgressDialog固定最大显示时长方案
你的现有逻辑为发起注册请求时展示加载弹窗,请求返回后主动关闭弹窗。要设置显示时长上限,核心是增加超时检测机制,到达指定时长后如果弹窗仍未被主动关闭则自动隐藏,同时可配套给出超时提示。
实现步骤
- 第一步:在当前Activity中声明全局变量
// 绑定主线程的Handler,用于调度超时任务 private Handler mTimeoutHandler = new Handler(Looper.getMainLooper()); // 超时执行的关闭弹窗任务 private Runnable mDismissDialogRunnable; // 弹窗最大显示时长,示例为10秒,单位:毫秒 private static final long MAX_PROGRESS_SHOW_TIME = 10 * 1000;
- 第二步:修改
register()方法,增加超时任务调度与清除逻辑
public void register() { ProjectUtils.showProgressDialog(mContext, true, getResources().getString(R.string.please_waits)); Log.e("Flag", "Register Click"); // 新增:调度超时任务,达到最大时长后自动关闭弹窗 mDismissDialogRunnable = new Runnable() { @Override public void run() { // 页面已销毁则不执行后续操作,避免窗口泄漏 if (isFinishing()) return; ProjectUtils.pauseProgressDialog(); ProjectUtils.showToast(mContext, "请求超时,请稍后重试"); } }; mTimeoutHandler.postDelayed(mDismissDialogRunnable, MAX_PROGRESS_SHOW_TIME); new HttpsRequest(Consts.REGISTER_API, getparm(), mContext).stringPost(tAG, new Helper() { @Override public void backResponse(boolean flag, String msg, JSONObject response) { Log.e("sign", "RESPONSE " + response.toString()); Log.e("Flag", "FLAG" + flag); // 新增:请求已返回,移除未执行的超时任务 if (mDismissDialogRunnable != null) { mTimeoutHandler.removeCallbacks(mDismissDialogRunnable); } ProjectUtils.pauseProgressDialog(); if (flag) { try { ProjectUtils.showToast(mContext, msg); startActivity(new Intent(mContext, SignInActivity.class)); finish(); overridePendingTransition(R.anim.anim_slide_in_left, R.anim.anim_slide_out_left); } catch (Exception e) { e.printStackTrace(); } } else { ProjectUtils.showToast(mContext, msg); } } }); }
- 第三步:在页面销毁生命周期中清除未执行的任务,避免内存泄漏
@Override protected void onDestroy() { super.onDestroy(); if (mTimeoutHandler != null && mDismissDialogRunnable != null) { mTimeoutHandler.removeCallbacks(mDismissDialogRunnable); } }
注意事项
- 最大显示时长可根据业务场景自行调整,建议设置为接口常规响应时长的1.5~2倍
- 必须在请求回调的第一时间移除超时任务,避免请求正常结束后仍触发超时提示
- 如果是在Fragment中使用,需将
isFinishing()替换为requireActivity().isFinishing()判断
内容的提问来源于stack exchange,提问作者Tsg Gonçalves
相关产品推荐
相关产品推荐

