finish()与onBackPressed()的区别:编程结束Activity该选哪个?
Android中finish()与onBackPressed()的区别,以及返回结果场景下的选择
先直接拆解核心差异,再针对你的需求给出明确建议:
两者的核心区别
- finish():这是最直接的Activity销毁指令,调用后会通知系统立刻启动当前Activity的销毁流程,触发
onDestroy()等生命周期回调。它的作用非常单一——就是结束当前Activity,不会处理任何和「返回导航」相关的额外逻辑(比如Fragment返回栈、默认返回过渡动画、自定义退出确认弹窗等)。 - onBackPressed():这个方法是模拟用户按下物理返回键/导航栏返回按钮的完整行为。默认实现里,它会先检查当前Activity的Fragment返回栈:如果有未弹出的Fragment,会先弹出最上层的Fragment;只有当Fragment返回栈为空时,才会调用
finish()结束Activity。另外,系统默认的返回过渡动画、你可能重写的返回确认逻辑(比如「确定要退出吗?」弹窗),都是在这个方法里触发的。
你的场景该选哪个?
你的需求是设置返回结果后直接关闭当前Activity,这种情况下优先用finish(),原因如下:
- 直接可靠:finish()会立刻触发Activity销毁流程,确保你设置的
setResult()能及时返回给上一个Activity,不会有额外的中间步骤。 - 避免意外:如果你的Activity中存在添加到返回栈的Fragment,调用onBackPressed()会先弹出Fragment而不是结束Activity,这就违背了你「关闭当前Activity」的初衷,导致结果无法及时返回。
当然,如果你的Activity没有Fragment返回栈,调用onBackPressed()最终也会走到finish(),结果也能返回,但finish()更直接、更贴合你当前需求的语义——你就是要结束Activity,而不是模拟用户按返回键的行为。
修正后的示例代码
另外注意:Intent类并没有putString()方法,传递字符串数据应该用putExtra(),正确的代码如下:
Intent intent = new Intent(); intent.putExtra("name", "Your Name"); setResult(RESULT_OK, intent); finish();
内容的提问来源于stack exchange,提问作者R.katiana
相关产品推荐
相关产品推荐

