Android开发中返回原Activity时如何正确停止并关闭仍显示的ProgressDialog
问题根源
- 执行顺序颠倒:点击事件中先执行
startActivity跳转至m1,之后才创建显示ProgressDialog,此时MeditationActivity已进入后台栈,Dialog依附于后台Activity存在,且未实现你需要的「显示3秒后跳转」逻辑。 - Dialog关闭逻辑无效:你将Dialog的销毁逻辑放在了MeditationActivity的
onBackPressed回调中,但从m1页面返回时触发的是m1的onBackPressed,不会执行Meditation的该回调,Dialog永远不会被主动关闭。
修复代码
Meditation类修改后代码
public class Meditation extends AppCompatActivity { // 加载框显示时长3秒 private static final long LOADING_DELAY = 3000; private ActivityMeditationBinding binding; private ProgressDialog progressDialog; private final Handler delayHandler = new Handler(Looper.getMainLooper()); private Runnable jumpTask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityMeditationBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); findViewById(R.id.Med_1).setOnClickListener(v -> { // 先初始化并显示加载框 progressDialog = new ProgressDialog(Meditation.this); progressDialog.setContentView(R.layout.loading_screen_first_version); progressDialog.setCancelable(false); progressDialog.show(); // 定义跳转任务 jumpTask = () -> { // 跳转前先销毁加载框 if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); } startActivity(new Intent(Meditation.this, m1.class)); }; // 3秒后执行跳转 delayHandler.postDelayed(jumpTask, LOADING_DELAY); }); } @Override protected void onStop() { super.onStop(); // Activity进入后台时移除未执行的跳转任务、销毁加载框兜底 if (delayHandler != null && jumpTask != null) { delayHandler.removeCallbacks(jumpTask); } if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); } } @Override protected void onDestroy() { super.onDestroy(); // 页面销毁时清空资源避免内存泄漏 if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } if (delayHandler != null && jumpTask != null) { delayHandler.removeCallbacks(jumpTask); } } }
说明
m1页面的现有逻辑无需修改,修复后的逻辑:
- 点击CardView后先弹出加载框,3秒延迟到后先销毁加载框再跳转至m1,避免Dialog残留
- 增加兜底逻辑:只要Meditation进入后台(包括跳转至m1、用户按桌面键退后台),都会自动销毁加载框、移除未执行的跳转任务,从m1返回时自然不会再看到残留的Dialog
内容的提问来源于stack exchange,提问作者Diligent PD
相关产品推荐
相关产品推荐

