2012-02-07 33 views
3

我的应用似乎表现完美,但我不明白一件事。当我按下主页按钮并返回到我的应用程序时,以前的状态会自动恢复。当我按主页按钮,然后手机在主屏幕(或除我自己以外的任何其他视图)中休眠并返回到我的应用程序时,以前的状态将自动恢复。为什么我的Android应用程序调用onCreate()时,当我的视图中启动但不是从主屏幕启动?

现在,当手机进入休眠状态时,我的活动在顶部,它不会自动恢复以前的状态,但似乎调用onCreate(),因为开始初始化发生,我的应用程序的行为就好像它只是开始。

我能够使用saveInstanceState()来保存实例并调用存储状态,所以最终问题是可以解决的,但我的问题是: 为什么Android会从我的活动中进入睡眠状态而不会调用onCreate()从另一个? 如果它没有调用onCreate()发生了什么,为什么我必须打扰与saveInstanceState(),因为在每个实例(禁止低内存)我的应用程序将用户返回到他们的最后一个“地标”除了手机去从我的活动中休息。

回答

2

当我遇到生命周期方法问题时,我会做的是在所有我的活动中添加onCreate,onPause,onResume等内部log.D(“inPause()”),以便准确跟踪哪些方法在什么时候被调用。

+1

是啊,这听起来不错,谢谢你,我来试试 – Marshall 2012-02-07 22:55:08

+0

如我所料它是表现,但我还是不明白为什么的onDestroy被称为在我的应用程序时,它是在上面而不是在它在后面。哦,我想这并不重要,我真的不知道重力是如何工作的,但我可以使用它! (有一天我会找出答案,希望:) :) – Marshall 2012-02-08 19:54:56

0

如果以前销毁您的活动,Android只会调用onCreate,在这种情况下,onDestroy会被调用。在没有调用onCreate的情况下保存活动状态的情况只是您的活动从未被破坏的情况,它始终保持运行。

Here是何时以及如何保存/恢复实例状态的概述。

+0

谢谢!作为一个新手,它有点压倒性的,但知道一点C && Java是超级有用的。我从来没有见过你介绍过的这篇文章。好东西。不过,我不确定为什么onDestroy被调用,如果SLEEP激活当我的观点是在顶部,而不是当我的应用程序在后台。我只想知道为什么! (我可以保存变量,以便用户体验看起来不错,但...) – Marshall 2012-02-08 19:46:41

4

检查您的行为是否已经锁定了方向肖像景观,如果你已经锁定的方向,它会调用的onCreate(),因为它改变了方向它睡觉前,当它唤醒。

您可以通过将android:configChanges="orientation"添加到清单中的活动标记中来解决此问题。

<activity 
android:name=".MainActivity" 
android:screenOrientation="portrait" 
android:configChanges="orientation" 
/> 
相关问题