ANDROID:按下后退按钮后的活动状态

时间:2014-03-09 07:11:01

标签: android android-intent android-activity android-lifecycle

想象一下,您有以下一系列活动:

Activity A -> Activity B -> Activity C

当您使用活动C时,按下本机后退按钮,将转到活动B.现在活动C的状态是什么?它还在内存中还是已经完成了?

如果它仍然在内存中,有没有办法恢复活动?除了启动此活动的另一个实例...

我应该补充一点,这是您不使用任何标志的标准情况,包括:FLAG_ACTIVITY_CLEAR_TOP

4 个答案:

答案 0 :(得分:7)

默认行为是当您按下硬件“后退”按钮时,当前活动将从后台堆栈中删除,并且将启动活动“破坏”序列。从那一刻起,你不应该依赖它可能在某个地方的事实 - 由Android来决定它何时实际上会杀死这个活动。

我之前的调查表明,受害者的onDestroy()只有在新活动加载完毕且空闲时才会被调用。

您可以在Manifest中为您的活动指定android:launchMode="singleInstance"。这将确保当时只创建一个活动实例

答案 1 :(得分:4)

您可能需要考虑阅读the official docs

更具体地说是回答你问题的部分:

  

当用户按下“返回”按钮时,当前活动将从堆栈顶部弹出(活动被销毁),之前的活动将恢复(其UI的先前状态将恢复)。

现在提出第二个问题......你可以继续阅读同一页......

  

当你开始一个活动时,你想提出它的一个现有实例(而不是在后面的堆栈顶部创建一个新实例)

所以如果你读到了......你会发现......

  

你可以使用中的属性做更多这些事情   清单元素和您传递给的意图中的标志   startActivity()。

     

在这方面,您可以使用的主要属性是:

     

taskAffinity   launchMode   allowTaskReparenting   clearTaskOnLaunch   alwaysRetainTaskState   finishOnTaskLaunch

     

您可以使用的主要意图标志是:

     

FLAG_ACTIVITY_NEW_TASK   FLAG_ACTIVITY_CLEAR_TOP   FLAG_ACTIVITY_SINGLE_TOP

答案 2 :(得分:4)

不,它不在记忆中。按下后退按钮后即可完成。您应该在android:launchMode="singleTask"中使用androidmanifest.xml用于您希望在没有新实例的情况下创建该特定活动的实例。有关详细信息,this链接会有所帮助。

答案 3 :(得分:1)

按以下顺序......

Activity A -> Activity B -> Activity C

当您在Activity C中按后退按钮时,将调用onBackPressed()方法。 onBackPressed()的默认行为是在您Override功能之前完成当前活动。

因此,在正常情况下,在按下后,当前Activity将被销毁,而您无法在Activity Stack中找到它,因此您无法恢复它。

您可以在以下链接中找到Android Developer's doc的更多信息...

Tasks and Back Stack