想象一下,您有以下一系列活动:
Activity A -> Activity B -> Activity C
当您使用活动C时,按下本机后退按钮,将转到活动B.现在活动C的状态是什么?它还在内存中还是已经完成了?
如果它仍然在内存中,有没有办法恢复活动?除了启动此活动的另一个实例...
我应该补充一点,这是您不使用任何标志的标准情况,包括:FLAG_ACTIVITY_CLEAR_TOP
答案 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的更多信息...