设备后退按钮与操作栏后退按钮的活动生命周期差异

Posted

技术标签:

【中文标题】设备后退按钮与操作栏后退按钮的活动生命周期差异【英文标题】:Activity Lifecyle Difference in Device's Back Button vs Actionbar's Back Button 【发布时间】:2019-05-21 21:21:40 【问题描述】:

我目前正在学习活动生命周期。我注意到以下几点:

我有两个 Activity,A 和 B。 当我从活动 A 打开活动 B 时,A 会停止,而 B 会创建并启动。 当我按下设备上的返回按钮时,B 被破坏,而 A 被重新启动。 但是当我改用操作栏的后退/向上按钮时,B 被破坏,A 被破坏,然后调用 onCreate()。

为什么在操作栏中使用向上按钮时 A 被破坏而不是重新启动?

我希望我的问题很清楚,如果没有,请发表评论。

【问题讨论】:

【参考方案1】:

当您按下 BACK 按钮时,这会在当前的 Activity 中调用 onBackPressed()。该方法的默认行为(如果在Activity 中没有被覆盖)是在Activity 上调用finish()。这将完成 Activity 并恢复其下方的 Activity

UP 按钮调用startActivity() 并带有Intent,其构建方式如下:

Intent intent = new Intent(this, TargetActivityForUpButton.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

此代码会将堆栈中的所有活动移回TargetActivityForUpButton,包括TargetActivityForUpButton。然后它会创建一个 TargetActivityForUpButton 的新实例并启动该 Actvity(您将看到 onCreate()onStart()onResume()Activity 上调用。

另请参阅https://developer.android.com/training/implementing-navigation/ancestral 中的“导航到父活动”部分

【讨论】:

【参考方案2】:

设备的后退按钮实际上是带您返回(返回上一个活动)。操作栏后退按钮的工作方式类似于“向上”按钮(在应用程序的层次结构中)。这就是为什么操作栏的后退按钮不会带您离开应用程序,而设备的后退按钮会继续带您返回,即使是在应用程序之外。操作栏存在于您的应用中,因此它遵循 Activity 的生命周期方法,并在您每次返回时从头开始,而设备将从停止的位置重新启动。

编辑:

后退按钮出现在系统导航栏中,用于按时间倒序浏览用户最近使用过的屏幕的历史记录。它通常基于屏幕之间的时间关系,而不是应用程序的层次结构。

(Read more here)

【讨论】:

以上是关于设备后退按钮与操作栏后退按钮的活动生命周期差异的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖android中的操作栏后退按钮?

windows phone 7 让应用程序在后退按钮上运行

在父活动上按下后退按钮

如何以编程方式获取操作栏后退按钮宽度?

在反应导航中禁用后退按钮

本机脚本 |在android后退按钮导航后调用ngOnInit