【问题标题】:Android Activity-Lifecycle... how to avoid onDestroy()?Android Activity-Lifecycle...如何避免 onDestroy()?
【发布时间】:2011-11-18 16:25:51
【问题描述】:

我有一个应用程序,它使用 ActicityGroup 来拥有一堆 Activity。如果我开始一个新的活动,我会作为我的 ActivityGroup 的子项来执行此操作。假设我在我的起始活动 (1) 中,并且我开始了一个新活动 (2),所以这就是所谓的:

(1): onPause()

(2): onCreate(), onStart(), onResume()

到这里为止,一切都像相位一样。如果我按下我的 BackButton,堆栈如下:

(2): onPause(), onStop(), onDestroy()

(1): onStop(), onDestroy() [原文如此]

(1): onCreate(), onStart(), onResume()

我看不出有什么原因,首先为什么 (1) 应该执行 onStop 和 onDestroy() 以再次重新创建,其次为什么永远不会调用 onRestart (1)。

有人有这种行为的原因吗?我可以以某种方式“取消”对 onStop() 或 onDestroy() 的调用吗? 任何想法都赞赏

【问题讨论】:

标签: android android-activity lifecycle activitygroup


【解决方案1】:

在启动子活动时尝试使用 FLAG_ACTIVITY_SINGLE_TOP,例如:

    Window window = getLocalActivityManager().startActivity(id,
            intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP));

更多信息在这里:

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_SINGLE_TOP

【讨论】:

  • 这里的问题是:它按方面工作:创建 FIRST_ACTIVITY -> 然后启动 SECOND,如上,onBack 它只调用 FIRST 的 onResume。但是如果我想重新启动 SECOND,NOTHING 会在那里调用
【解决方案2】:

你可以通过一个非常简单的方式在按下返回按钮时避免Activity的onDestroy方法,

提一下

android:persistent="true"

对于您的活动,这应该可以防止您的活动被破坏,要了解更多详细信息,您可以访问以下 SO 帖子

Prevent activity from being destroyed as long as possible

【讨论】:

    【解决方案3】:

    当您按下后退按钮时,默认行为是停止或销毁当前活动,您可以覆盖后退按钮。如果您按下主页按钮,那么它将使用 onPause(),这意味着当您再次启动相同的活动时,操作系统将考虑您想要继续当前活动,但如果您按下返回按钮,则意味着您完成当前活动并返回上次活动

    【讨论】:

    • 我想你误会了:很明显 SECOND Activity 会破坏 onBackPressed,但为什么这也是 FIRST Activity??
    • 我认为如果我们作为新活动开始它会破坏它,但如果我们为结果开始活动则不会
    【解决方案4】:

    Onstop()onDestroy() 在您没有完成活动之前不会调用。 Ondestory() 要求释放 Activity 占用的资源。如果活动使用已经结束,那么最好销毁此活动。

    其次,这将有利于内存管理方案。如果你不调用destroy,那么它会在你退出应用程序时自动调用

    最后 如果您不想在按下返回按钮时调用destroy,那么您可以使用覆盖方法onBackpressed()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      相关资源
      最近更新 更多