Android Activity-Lifecycle ...如何避免onDestroy()?

时间:2011-09-16 12:51:34

标签: android android-activity lifecycle activitygroup

我有一个App,它使用ActicityGroup来拥有一堆Activity。如果我开始一个新的Activity,我这样做我的ActivityGroup的Child。让我们假设我在我的开始活动(1)中,我开始一个新的(2),所以这就是所谓的:

(1):onPause()

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

直到这里,一切都如预期的那样。如果按下我的BackButton,堆栈如下:

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

(1):onStop(),onDestroy()[sic]

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

我认为没有理由,首先为什么(1)应该执行onStop,而onDestroy()再次重新创建,以及为什么onRestart永远不会被调用(1)。

有没有人有这种行为的理由?我可以以某种方式'取消'对onStop()或onDestroy()的调用吗? 任何想法apreciated

4 个答案:

答案 0 :(得分:5)

在启动子活动时尝试使用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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

其次,它对内存管理方案有利。如果你没有调用destroy,那么当你从app

退出时它会自动调用

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

答案 3 :(得分:0)

当以非常简单的方式按下后退按钮时,您可以避免使用Activity onDestroy方法,

提到

android:persistent="true"

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

Prevent activity from being destroyed as long as possible