【问题标题】:Activity OnCreate called when phone goes to sleep手机进入睡眠状态时调用 Activity OnCreate
【发布时间】:2010-11-10 20:18:29
【问题描述】:

当我按下 Droid 上的睡眠按钮时,我的活动的 oncreate 被调用。为什么会这样?为什么操作系统要在设备进入睡眠状态时调用 OnCreate?有什么办法可以阻止它,或者至少知道这是因为手机进入睡眠状态?

【问题讨论】:

  • 您确定您的应用没有因为方向改变而重新启动?
  • 不是。当电话完全静止在我的桌子上时,就会发生这种情况。当我按下睡眠按钮时,会调用 onDestroy,然后不知何故开始了一个新的活动。
  • 我应该指出,它在重新启动时传递了我一个有效的 savedInstanceState。
  • 我错了。这实际上是一个方向的改变。通过将 android:configChanges="orientation" 添加到我的清单中,我不会重新启动活动。谢谢!
  • 是的,由于某种原因,在我的手机上,无论设备的物理位置如何,“睡眠”始终处于相同的方向,因此方向更改过程(这可能意味着终止和重新启动)通常发生在它准备睡觉了。

标签: android


【解决方案1】:

这尤其发生在轮换锁定的活动中,例如在活动标签内的清单中有这个:

android:screenOrientation="portrait"

当您关闭屏幕时,它会读取加速度计以确定真实方向并在关闭前更改为该方向。

所以是的,简单的解决方案也是添加 configChanges,使其看起来像这样:

<activity 
    android:name=".MyActivity"
    android:screenOrientation="landscape"
    android:configChanges="orientation"
/>

您不需要指定屏幕方向,但如果您不指定屏幕方向,那么它在启动时的任何方向都会保持不变,除非您编写代码来处理配置更改。

附带说明一下,当我开始在 ICS 上测试我的应用程序时,我必须在一些活动开始时处理一些创建/销毁/创建周期的怪癖。为了使代码具有通用性,需要进行一些额外的制衡。

【讨论】:

  • 你有更多关于它如何在 ICS 上工作的信息吗?我在运行 2.3.3 和 4.0.4 的设备上遇到了这个问题。您的解决方案适用于我的 2.3.3 设备,但 onCreate() 在我的 4.0.4 上睡觉后仍然会被调用。
  • 问题可能是设备有一个硬编码的锁定屏幕方向。要对此进行测试,请将锁定的方向设置为相反(可能是纵向)。这可能会使额外的 onCreate 消失,并为您提供一个起点来寻找如何处理不相关的方向变化。
  • 谢谢。你是对的。我通过将 screenSize 添加到像 android:configChanges="orientation|screenSize" 这样的 configChanges 找到了解决方案。来自文档:“注意:如果您的应用程序的目标 API 级别为 13 或更高(由 minSdkVersion 和 targetSdkVersion 属性声明),那么您还应该声明“screenSize”配置,因为当设备在纵向和横向之间切换时它也会改变方向。”
【解决方案2】:

每当我的应用(游戏)从睡眠中恢复时,我都会重新加载相同的概率

我做了什么来解决它

我补充

<activity 
     android:configChanges="orientation|screenSize"
/>

希望这会对某人有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    相关资源
    最近更新 更多