【问题标题】:ANDROID: Activity state after pressing the back buttonANDROID:按下后退按钮后的活动状态
【发布时间】:2014-03-09 07:11:01
【问题描述】:

假设您有以下一系列活动:

Activity A -> Activity B -> Activity C

当您在 Activity C 上时,按下本机的后退按钮,会将您带到 Activity B。现在 Activity C 的状态是什么?它还在记忆中还是已经完成了?

如果它还在记忆中,有没有办法恢复活动?除了启动此活动的另一个实例...

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

【问题讨论】:

  • 它已经完成了,即不在内存中了

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


【解决方案1】:

默认行为是,当您按下硬件“返回”按钮时,当前活动将从后台堆栈中删除,并启动活动“销毁”序列。从那一刻起,您不应该依赖它可能存在于某个地方的事实 - 完全取决于 Android 来决定它何时真正终止此活动。

我之前的调查表明,受害者的onDestroy() 只会在新活动完成加载并处于空闲状态时被调用。

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

【讨论】:

  • 我有活动 a,活动 b,在活动 bi 中,有一个表格和无线电组。如果我正在做无线电组操作并填写表格并按下并再次锥到活动 b 我怎么能查看那些旧表单详细信息并单击单选按钮等。
【解决方案2】:

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

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

当用户按下返回按钮时,当前活动从栈顶弹出(活动被销毁)并恢复前一个活动(其 UI 的先前状态被恢复)。

现在是第二个问题……您可以继续阅读同一页……

当你启动一个 Activity 时,你想把它的一个现有实例提前(而不是在返回栈的顶部创建一个新实例)

所以如果你读到……你会发现……

你可以做这些和更多的事情,在 清单元素和您传递给的意图中的标志 开始活动()。

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

任务关联 启动模式 allowTaskReparenting clearTaskOnLaunch alwaysRetainTaskState 完成任务启动

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

FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_SINGLE_TOP

【讨论】:

  • 我有 mainDashboard->profileview-profileupdate 一旦我做更改和更新 goto profileview 更新的详细信息,然后回溯需要维护 maindashboard 和 all.please 帮助我
【解决方案3】:

不,它不在内存中。当你按下后退按钮时,它就完成了。您应该在 androidmanifest.xml 中使用 android:launchMode="singleTask" 用于您不希望为其创建新实例(如果已经存在实例)的特定活动。如需更多信息,this 链接将很有帮助。

【讨论】:

    【解决方案4】:

    按以下顺序...

    Activity A -> Activity B -> Activity C
    

    当您按下Activity C 中的返回按钮时,将调用onBackPressed() 方法。 onBackPressed() 的默认行为是完成当前活动,直到您 Override 功能。

    所以,正常情况下,回按后当前的Activity会被销毁,在Activity Stack中找不到,所以无法恢复。

    您可以在下面的链接中从 Android 开发者的文档中找到更多信息...

    Tasks and Back Stack

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多