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

finish()与onBackPressed()的区别:编程结束Activity该选哪个?

Android中finish()与onBackPressed()的区别,以及返回结果场景下的选择

先直接拆解核心差异,再针对你的需求给出明确建议:

两者的核心区别

  • finish():这是最直接的Activity销毁指令,调用后会通知系统立刻启动当前Activity的销毁流程,触发onDestroy()等生命周期回调。它的作用非常单一——就是结束当前Activity,不会处理任何和「返回导航」相关的额外逻辑(比如Fragment返回栈、默认返回过渡动画、自定义退出确认弹窗等)。
  • onBackPressed():这个方法是模拟用户按下物理返回键/导航栏返回按钮的完整行为。默认实现里,它会先检查当前Activity的Fragment返回栈:如果有未弹出的Fragment,会先弹出最上层的Fragment;只有当Fragment返回栈为空时,才会调用finish()结束Activity。另外,系统默认的返回过渡动画、你可能重写的返回确认逻辑(比如「确定要退出吗?」弹窗),都是在这个方法里触发的。

你的场景该选哪个?

你的需求是设置返回结果后直接关闭当前Activity,这种情况下优先用finish(),原因如下:

  1. 直接可靠:finish()会立刻触发Activity销毁流程,确保你设置的setResult()能及时返回给上一个Activity,不会有额外的中间步骤。
  2. 避免意外:如果你的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:48:24