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

Kas*_*sra 7 android android-intent android-lifecycle android-activity

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

Activity A -> Activity B -> Activity C
Run Code Online (Sandbox Code Playgroud)

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

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

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

Pav*_*dka 7

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

我之前的调查表明,onDestroy()只有当新活动完成加载并且闲置时才会调用受害者.

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


Mar*_*ini 4

您可能需要考虑阅读官方文档

\n

更具体地说,回答您问题的部分:

\n
\n

当用户按下“后退”按钮时,当前 Activity 将从堆栈顶部弹出(该 Activity 被销毁),并恢复上一个 Activity(恢复其 UI 的先前状态)。

\n
\n

现在,对于你的第二个问题\xe2\x80\xa6,你可以继续阅读同一页\xe2\x80\xa6

\n
\n

当您启动一个活动时,您希望向前提供它的现有实例(而不是在返回堆栈顶部创建一个新实例)

\n
\n

所以如果你读到 \xe2\x80\xa6 你会发现\xe2\x80\xa6

\n
\n

您可以使用 \nmanifest 元素中的属性以及传递给 \nstartActivity() 的意图中的标志来执行这些操作以及更多操作。

\n

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

\n

taskAffinity\nlaunchMode\nallowTaskReparenting\nclearTaskOnLaunch\nalwaysRetainTaskState\nfinishOnTaskLaunch

\n

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

\n

FLAG_ACTIVITY_NEW_TASK\nFLAG_ACTIVITY_CLEAR_TOP\nFLAG_ACTIVITY_SINGLE_TOP

\n
\n