果冻豆中的Android活动生命周期

时间:2012-07-26 19:26:59

标签: android lifecycle

我已经开发了几个月的应用程序,并准备好发布。我一直在使用带有Android 4.0.4的摩托罗拉Xoom进行整个过程的测试,一切都运转良好。我从谷歌购买了Nexus 7(运行Jelly Bean 4.1),当设备休眠或关闭时,我现在遇到活动生命周期的各种问题。

我创建了一个新项目,其唯一目的是检查生命周期,这是我想出的结果。以下代码是我在每个生命周期方法中所做的一些示例。

@Override
protected void onPause() {
    Log.i("TEST", "onPause()");
    super.onPause();
}

Xoom的结果(预期结果)

---------- Program Launch -------------
onCreate(null)
onStart()
onResume()
---------- Turn Off Screen ------------
onPause()
onSaveInstanceState(not null)
onStop()
---------- Turn Screen On -------------
onReStart()
onRestoreInstanceState(not null)
onResume()

Nexus 7的结果(意外结果)

---------- Program Launch -------------
onCreate(null)
onStart()
onResume()
---------- Turn Off Screen ------------
onPause()
onSaveInstanceState(not null)
onStop()
onDestroy()
onCreate(not null)
onStart()
onRestoreInstanceState(not null)
onResume()
onPause()
---------- Turn Screen On -------------
OnResume()
onPause()
onSaveInstanceState(not null)
onStop()
onDestroy()
onCreate(not null)
onStart()
onRestoreInstanceState(not null)
onResume()

同样,这些结果来自一个全新的项目,除了每个方法中的Log语句之外没有任何代码更改。当Nexus 7关闭并重新打开时,为什么会有这么多额外的,不必要的方法调用?它似乎完全破坏了应用程序,然后重新创建。

为了完整起见,当使用主页按钮然后重新启动应用程序时,设备之间的生命周期似乎是一致的。

提前感谢您的帮助。 韦恩

2 个答案:

答案 0 :(得分:6)

Jelly Bean 4.1 - Nexus 7在此路径上有一个选项:

  

设置 - >开发者选项 - >不要保持活动...

该选项将终止所有转到后台的活动。 因此,当Android将状态更改为“正在睡眠”和“唤醒”时,您的活动将被销毁并重新创建。

答案 1 :(得分:4)

看起来您的活动是在相关方案中重新创建的。这通常发生在系统中发生配置更改时。默认情况下,您的活动会重新创建并重新启动,除非您明确决定自行处理配置更改。您应该检查this list,当您打开/关闭屏幕时可能会发生以下更改之一(因为您确定不同时旋转设备?)。

关于配置更改,您可以阅读此官方page