【发布时间】:2013-03-26 19:20:27
【问题描述】:
相关问题:
这是我在活动中遇到的奇怪行为。
人像模式(正常)
- 按锁屏,
Activity: onPause(); - 解锁屏幕,
Activity: onResume()。
横向模式(很奇怪)
- 按下屏幕锁定,
Activity: onPause() -> onStop() -> onDestroy() -> onCreate() -> onStart() -> onResume()加载纵向布局; - 解锁屏幕
Activity: onPause() -> onStop() -> onDestroy() -> onCreate() -> onStart() -> onResume()并加载横向布局。
我的期望是:
人像模式:(相同)
横向模式:(应该像纵向模式)
- 按锁屏,
Activity: onPause(); - 解锁屏幕,
Activity: onResume()。
所以我的问题:
- 为什么我的活动会这样?
- 您的活动表现如何?
我的问题的原文描述:
当我按下手机的锁定屏幕按钮时,当我的 Activity 处于横向模式时,我注意到(在我输出到 Eclipse 的调试消息中)Activity 被重新创建为纵向模式(而屏幕是当然,全黑)。然后当我再次按下 Lock Screen 按钮解锁屏幕时,Activity 被销毁并重新创建为它的 Portrait。
我记得(虽然不是 100% 肯定),而且我期望的是,我的 Activity 应该只经历 onSaveInstanceState() 和 onPause(),而在横向模式下锁定屏幕,就像在纵向模式下一样。而不是将 Activity 重新创建为 Portrait 并再次返回 Landscape。
是不是我的手机搞砸了?怎样才能恢复正常?
谢谢!
感谢大家对此问题的贡献。特别感谢@HoanNguyen 在他的设备中为我进行的测试。特别感谢@Raghunandan 与我就这个问题进行了深入讨论。
总结到目前为止大家的贡献,我有以下结论:
1。这是正常现象。
看来,在手机上,处于横向模式的正在运行的活动在屏幕锁定时切换到纵向模式是正常行为。至少到目前为止,在经过测试的手机上是这样。因此,我们必须确保我们的生命周期函数能够始终优雅地处理这种变化。
2。猜猜这是因为锁定屏幕中的“默认方向”。
我们没有关于这个问题的文档或很多资源。但是假设正在运行的活动在屏幕锁定时切换回设备的“默认方向”,就像在大多数设备中锁定的屏幕是纵向的一样,这是非常合乎逻辑的。
进一步研究:
我只是想知道如果我们有一个横向锁定屏幕,活动会如何表现?
【问题讨论】:
-
当屏幕锁定时,似乎所有的应用程序都会被假定为默认方向,
-
感谢@HoanNguyen 的回复。你在你的设备上测试过吗?如果你能引用一些关于这个假设的参考资料,那将是完美的!非常感谢!
-
我在 3 部手机上进行了测试,一部带有 JB,另一部带有 ICS。我没有关于此的任何参考资料。但是如果你想一想,当设备是平板时,android 将无法告诉你什么是纵向或横向,因此它必须默认为设备默认方向。现在如果你锁定屏幕那么你可以把它平放,如果现在屏幕解锁但是平放你怎么办?
-
非常感谢@HoanNguyen 的测试!所以我们几乎可以得出结论,这是一个“功能”而不是“奇怪的行为”(:我同意你的观点,需要默认方向。但是在屏幕锁定时,我希望它保持以前的方向,或使用传感器方向。(所以回答你的问题是:以前的方向,如果平坦。)默认方向应该只在手机初始化时使用(第一时间打开)和 i> 平放。
标签: android android-activity android-lifecycle android-orientation lockscreen