【问题标题】:Android back button behaviourAndroid 后退按钮行为
【发布时间】:2012-07-21 14:37:16
【问题描述】:

假设我们有一个具有默认行为的默认空活动,使用默认意图标志启动。用户按下设备上的后退按钮。活动消失了……但实际上如何?

  • 按下后退按钮的行为是否与finish() 相同?
  • 活动是否被立即销毁(onDestroy 被调用)?
  • 活动是否保证被销毁,但不能立即销毁?
  • 是否有可能该活动不会被销毁并且将来启动该活动时该实例将被重用? (所以只有 onPauseonStop -> onStartonResume 被调用?)

我正在寻找一个可靠的答案,所以如果您不确定这里发生了什么,请不要回答。

【问题讨论】:

  • 你能把你的代码贴出来,以便我们更好地判断
  • default, empty activity with default behaviour, launched with default intent flags 中是否有无法重现的内容?只需在 IDE 中创建一个默认项目。
  • @Chips_100:您提供的链接没有回答这个问题。
  • 阅读这个小章节:developer.android.com/training/basics/activity-lifecycle/… [...]your activity is destroyed due to normal app behavior, such as when the user presses the Back button or your activity signals its own destruction by calling finish().[...] 不过我建议阅读整章。

标签: android android-activity onresume onpause ondestroy


【解决方案1】:

当用户按下BACK键时,当前activity从栈顶弹出(activity保证会被销毁,但不会立即销毁,可能是系统资源不足的时候)并恢复之前的activity(其 UI 的先前状态已恢复)。

Which actions does the back button/back key on Android trigger?

【讨论】:

【解决方案2】:

当您按下返回时,(如果没有被键盘、片段、活动等截获)操作系统(可能通过 ActivityManager)将尝试向用户显示当前任务中的先前活动(同样,忽略片段'回栈)。

如果没有此类活动,则任务将终止,您将转到上一个任务 - 大部分时间是主屏幕或其他可能已启动您的应用程序的应用程序。

您很快就会接到onDestroy 的电话(这取决于开始下一个活动需要多长时间,但在一部好手机上应该在 100-200 毫秒以下)。

onFinish 之后,您的活动实例将不会被重复使用。这发生在活动被销毁之前,因此如果您需要另一个相同类型的活动,操作系统将创建另一个实例。

【讨论】:

  • 这不是我问的。这个问题已经够准确了。
  • “活动消失了……但实际上如何?” - 我想我解决了你的问题
  • 这就是你的问题。您只需阅读第一句话并不假思索地回答。如果您阅读其余部分,您会注意到我已经解释了我到底在问什么。
【解决方案3】:

你应该看看这个try this

请具体说明您希望使用默认活动的后退按钮做什么......

【讨论】:

    【解决方案4】:

    http://developer.android.com/training/basics/activity-lifecycle/recreating.html

    这是官方 Android 文档中的一个子章节,用于解决您的问题。它是主题Managing the Activity Lifecycle 的一个子章节,可以在这里阅读: http://developer.android.com/training/basics/activity-lifecycle/index.html

    绝对值得阅读整章以了解有关 Android Activity 行为的详细信息。但是子章节(第一个链接)是这个问题的相关部分。

    【讨论】:

    • 这是link-only answer,能否请您引用文档的相关部分?感觉就像你想通过强迫人们阅读这些文章来做好事,尝试苏格拉底的方法并使用spoiler markdown
    【解决方案5】:

    肯定会调用onDestroy() .....在某些情况下,由于正常的应用程序行为,您的 Activity 会被破坏,例如当用户按下后退按钮或您的 Activity 通过调用 @ 发出自己的破坏信号时987654322@。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      相关资源
      最近更新 更多