You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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. 最大显示时长可根据业务场景自行调整,建议设置为接口常规响应时长的1.5~2倍
  2. 必须在请求回调的第一时间移除超时任务,避免请求正常结束后仍触发超时提示
  3. 如果是在Fragment中使用,需将isFinishing()替换为requireActivity().isFinishing()判断

内容的提问来源于stack exchange,提问作者Tsg Gonçalves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:27:03