Activity 设备后退按钮与操作栏后退按钮的生命周期差异
Activity Lifecyle Difference in Device's Back Button vs Actionbar's Back Button
我目前正在学习 Activity 生命周期。我注意到以下内容:
- 我有两个 Activity,A 和 B。
- 当我从 Activity A 打开 Activity B 时,A 停止,B 被创建并启动。
- 当我按下设备上的后退按钮时,B 被销毁,A 重新启动。
- 但是当我改用操作栏的返回/向上按钮时,B 被销毁,A 被销毁,然后 onCreate() 被调用。
为什么在 ActionBar 中使用向上按钮时 A 被销毁而不是重新启动?
希望我的问题很清楚,如果不清楚请发表评论。
设备的后退按钮实际上会将您带回(回到之前的activity)。操作栏后退按钮的工作方式类似于 "Up" 按钮(在应用的层次结构中)。这就是为什么操作栏的后退按钮不会将您带到应用程序之外,而设备的后退按钮将继续带您返回,甚至是在应用程序之外。操作栏存在于您的应用程序中,因此它遵循 activity 的生命周期方法并在您每次返回时从头开始,而设备从停止的地方重新启动。
编辑:
The Back button appears in the system navigation bar and is used to navigate, in reverse chronological order, through the history of screens the user has recently worked with. It is generally based on the temporal relationships between screens, rather than the app's hierarchy.
当你按下返回按钮时,这会调用当前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
的新实例并启动 Actvity
(您将看到 onCreate()
、onStart()
、onResume()
在 Activity
上调用。
另请参阅 https://developer.android.com/training/implementing-navigation/ancestral
中的 "Navigate up to parent activity" 部分
我目前正在学习 Activity 生命周期。我注意到以下内容:
- 我有两个 Activity,A 和 B。
- 当我从 Activity A 打开 Activity B 时,A 停止,B 被创建并启动。
- 当我按下设备上的后退按钮时,B 被销毁,A 重新启动。
- 但是当我改用操作栏的返回/向上按钮时,B 被销毁,A 被销毁,然后 onCreate() 被调用。
为什么在 ActionBar 中使用向上按钮时 A 被销毁而不是重新启动?
希望我的问题很清楚,如果不清楚请发表评论。
设备的后退按钮实际上会将您带回(回到之前的activity)。操作栏后退按钮的工作方式类似于 "Up" 按钮(在应用的层次结构中)。这就是为什么操作栏的后退按钮不会将您带到应用程序之外,而设备的后退按钮将继续带您返回,甚至是在应用程序之外。操作栏存在于您的应用程序中,因此它遵循 activity 的生命周期方法并在您每次返回时从头开始,而设备从停止的地方重新启动。
编辑:
The Back button appears in the system navigation bar and is used to navigate, in reverse chronological order, through the history of screens the user has recently worked with. It is generally based on the temporal relationships between screens, rather than the app's hierarchy.
当你按下返回按钮时,这会调用当前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
的新实例并启动 Actvity
(您将看到 onCreate()
、onStart()
、onResume()
在 Activity
上调用。
另请参阅 https://developer.android.com/training/implementing-navigation/ancestral
中的 "Navigate up to parent activity" 部分