2

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

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

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

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

4

2 回答 2

2

当您按下 BACK 按钮时,这会调用onBackPressed()当前的Activity. 该方法的默认行为(如果未在 中覆盖)Activity是调用finish(). Activity这将完成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中的“导航到父活动”部分

于 2018-12-21T13:41:20.923 回答
1

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

编辑:

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

在这里阅读更多

于 2018-12-21T12:01:46.483 回答