相关问题:
这是我在 Activity 中遇到的一个奇怪行为。
人像模式(正常)
- 按屏幕锁定,
Activity: onPause()
; - 解锁屏幕,
Activity: onResume()
。
横向模式(很奇怪)
- 按下屏幕锁定,
Activity :onPause() -> onStop() -> onDestroy() -> onCreate() -> onStart() -> onResume()
加载 纵向布局; - 解锁屏幕,
Activity: onPause() -> onStop() -> onDestroy() -> onCreate() -> onStart() -> onResume()
并加载 横向布局。
我期望的是:
肖像模式:(相同)
横向模式:(应该像纵向模式一样)
- 按屏幕锁定,
Activity: onPause()
; - 解锁屏幕,
Activity: onResume()
。
所以我的问题:
- 为什么我的 Activity 会这样?
- 您的 Activity 表现如何?
我的问题的原文描述:
当我按下手机的锁定屏幕按钮时,当我的 Activity 处于横向模式时,我注意到(在我输出到 Eclipse 的调试消息中)Activity 被重新创建为纵向模式(当屏幕处于当然是全黑)。然后当我再次按下锁定屏幕按钮解锁屏幕时, Activity 被销毁并再次重新创建到它的肖像。
我记得(虽然不是 100% 确定),但我期望的是,我的 Activity 应该只经历 onSaveInstanceState()
和 onPause()
,而 Lock Screen在横向模式下,就像在纵向模式下一样。而不是将 Activity 重新创建为 Portrait 并再次返回到 Landscape。
是不是我手机出问题了?我怎样才能恢复正常?
谢谢!
感谢大家为这个问题做出的贡献。特别感谢@HoanNguyen 在他的设备上为我所做的测试。特别感谢@Raghunandan 就此问题与我进行了深入讨论。
总结到目前为止大家的贡献,我有以下结论:
1。这是正常现象。
似乎在手机上,处于横向模式的正在运行的 Activity 在屏幕锁定时切换到纵向模式是一种正常行为。至少到目前为止,在经过测试的手机上是这样。因此,我们必须确保我们的生命周期函数能够始终优雅地应对这种变化。
2。猜猜这是因为锁定屏幕中的“默认方向”。
我们没有关于此问题的文档或许多资源。但是假设正在运行的 Activity 在屏幕锁定时切换回设备的“默认方向”(因为在大多数设备中锁定的屏幕是纵向的)是非常合乎逻辑的。
进一步研究:
我只是想知道如果我们有横向锁定屏幕,Activity 会如何表现?
最佳答案
您可以停止 Activity 在方向更改时重新启动,但这通常是一个非常糟糕的主意。
Android 文档有 a section on handling runtime changes with this note:
Note: Handling the configuration change yourself can make it much more difficult to use alternative resources, because the system does not automatically apply them for you. This technique should be considered a last resort when you must avoid restarts due to a configuration change and is not recommended for most applications.
如果您不需要备用资源和,Android 通常只建议您禁止在旋转时重新创建,更重要的是,有性能要求。在大多数情况下,设计良好的应用不需要这样做。
如果您坚持走抑制默认 Android 行为的道路,我会修改 Raghunandan 的代码并包括一个屏幕尺寸属性。从 API 级别 13 开始,屏幕尺寸会随着方向的改变而改变。因此,除非您仅针对 API 12 及以下版本,否则您必须包含 screenSize。
<activity android:name=".MyActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name">
关于android - 屏幕锁定时 Activity 返回纵向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15645611/