Android开发:如何销毁切换前的已运行Activity?
Android跳转Activity时销毁前一个Activity的实现方案
针对你需要在跳转新Activity时销毁/停止前一个Activity的需求,分两种场景给出具体实现:
一、从MainActivity跳转到SecondActivity时销毁MainActivity
方法1:启动新Activity后直接销毁当前页面
这是最直接的方式,启动SecondActivity后调用finish(),MainActivity会立即执行销毁生命周期:
// MainActivity中跳转的代码 Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); finish(); // 销毁当前MainActivity
方法2:通过Intent标记清空任务栈(适合复杂栈管理)
如果需要让SecondActivity成为任务栈的根页面,清空之前所有页面,可以给Intent添加标记:
Intent intent = new Intent(MainActivity.this, SecondActivity.class); // 清空现有任务栈,将SecondActivity作为新栈的根 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent);
这种方式会直接销毁任务栈中所有已存在的Activity,包括MainActivity。
二、从SecondActivity跳转回MainActivity时销毁SecondActivity
方法1:启动MainActivity后销毁当前SecondActivity
跳转完成后调用finish(),直接销毁SecondActivity:
// SecondActivity中跳转的代码 Intent intent = new Intent(SecondActivity.this, MainActivity.class); startActivity(intent); finish(); // 销毁当前SecondActivity
如果之前MainActivity已经被销毁,会创建新的Main实例;若Main仍在栈中,则会将其调至栈顶,同时销毁Second。
方法2:复用原有MainActivity并清理中间页面
如果希望回到之前的MainActivity实例,同时销毁SecondActivity,可以使用FLAG_ACTIVITY_CLEAR_TOP标记:
Intent intent = new Intent(SecondActivity.this, MainActivity.class); // 销毁MainActivity之上的所有Activity(这里就是SecondActivity),并将Main调至栈顶 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish();
这种方式会保留原有的MainActivity实例,避免重复创建,同时彻底清理中间的SecondActivity。
注意:调用
finish()后,Activity会依次执行onPause()→onStop()→onDestroy(),彻底停止并销毁,不会留在后台任务栈中。
内容的提问来源于stack exchange,提问作者imanuel ben chaim
相关产品推荐
相关产品推荐

