Android应用程序生命周期和后退按钮

Android应用程序生命周期和后退按钮,android,android-lifecycle,Android,Android Lifecycle,我读过关于活动生命周期的Android文档。然而,我很好奇应用程序中不同的活动是如何运行的 根据我所做的一些测试,在同一个应用程序中通过意图从活动A转换到活动B会通过onPause()暂停活动A,并通过onCreate()创建活动B 奇怪的是当活动B转换回活动A时 如果按下硬件后退键,则会为活动B触发onPause(),为活动A触发onResume()。这是我所期望的 但是,如果按下操作栏上的后退按钮,则会为活动A触发onstroy(),然后触发onCreate()和onResume() 为什么

我读过关于活动生命周期的Android文档。然而,我很好奇应用程序中不同的活动是如何运行的

根据我所做的一些测试,在同一个应用程序中通过意图从活动A转换到活动B会通过
onPause()
暂停活动A,并通过
onCreate()
创建活动B

奇怪的是当活动B转换回活动A时

如果按下硬件后退键,则会为活动B触发
onPause()
,为活动A触发
onResume()
。这是我所期望的

但是,如果按下
操作栏上的后退按钮
,则会为活动A触发
onstroy()
,然后触发
onCreate()
onResume()

为什么会这样?

操作栏上的“后退按钮”称为“向上按钮”。这是Up按钮的预期行为,如果您查看执行“Up”的代码的实现,您会看到活动a被重新创建

Intent parentActivityIntent = new Intent(getApplicationContext(), MainActivity.class);
parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(parentActivityIntent);
finish();
您可以定义“向上”按钮应该做什么,但是,我建议坚持默认行为

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // Your Code Here.
            break;
    }
}

为什么?

“向上”按钮(与“后退”按钮相反)应在应用程序层次结构中向上导航一级,始终。后退按钮应返回,即使它将离开当前应用程序
您不能只对当前的
活动
调用finish,因为父
活动
可能已经被垃圾收集,不再存在

我强烈建议你阅读一下官方文件,尤其是关于的部分。

操作栏上的“后退按钮”被称为“向上按钮”。这是Up按钮的预期行为,如果您查看执行“Up”的代码的实现,您会看到活动a被重新创建

Intent parentActivityIntent = new Intent(getApplicationContext(), MainActivity.class);
parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(parentActivityIntent);
finish();
您可以定义“向上”按钮应该做什么,但是,我建议坚持默认行为

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // Your Code Here.
            break;
    }
}

为什么?

“向上”按钮(与“后退”按钮相反)应在应用程序层次结构中向上导航一级,始终。后退按钮应返回,即使它将离开当前应用程序
您不能只对当前的
活动
调用finish,因为父
活动
可能已经被垃圾收集,不再存在


我强烈建议您阅读官方文件,尤其是关于的部分。

谢谢您在这里给出了非常明确的答案。是否有任何方法使“向上”按钮的性能与“后退”按钮类似,以便不必重新创建父活动。是的,您可以覆盖此行为。是否有任何理由“坚持默认行为”?这样做的用例是,当滚动位置丢失时,不必重新创建上一个活动(ListView)。回答得好!您是否可以解释一下,为什么默认行为比仅对当前的
活动执行
完成
要好?(假设当前的
活动
是由父
活动
启动的)。@蘑菇滚动位置可以使用onSaveInstanceState:)谢谢这里给出的非常清晰的答案。是否有任何方法使“向上”按钮的性能与“后退”按钮类似,以便不必重新创建父活动。是的,您可以覆盖此行为。是否有任何理由“坚持默认行为”?这样做的用例是,当滚动位置丢失时,不必重新创建上一个活动(ListView)。回答得好!您是否可以解释一下,为什么默认行为比仅对当前的
活动执行
完成
要好?(假设当前的
活动
是由父
活动
启动的)。@蘑菇状滚动位置可以使用onSaveInstanceState:)保存