android - 屏幕锁定时 Activity 返回纵向

标签 android android-activity android-lifecycle android-orientation lockscreen

相关问题:


这是我在 Activity 中遇到的一个奇怪行为。

人像模式(正常)

  1. 按屏幕锁定,Activity: onPause();
  2. 解锁屏幕,Activity: onResume()

横向模式(很奇怪)

  1. 按下屏幕锁定, Activity :onPause() -> onStop() -> onDestroy() -> onCreate() -> onStart() -> onResume() 加载 纵向布局;
  2. 解锁屏幕,Activity: onPause() -> onStop() -> onDestroy() -> onCreate() -> onStart() -> onResume() 并加载 横向布局。

我期望的是:

肖像模式:(相同)

横向模式:(应该像纵向模式一样)

  1. 按屏幕锁定,Activity: onPause();
  2. 解锁屏幕,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/

相关文章:

android - Dagger 2 inject() 包含一个依赖循环

android - 将数据从一个 Activity 发送到第二个 Activity 的 fragment

Android Lollipop - 绕过弹出 Activity 的锁屏

java - 从对象执行方法,其中方法名称作为字符串传递?

android如何在SD卡上自动安装应用程序

broadcastreceiver - 访问广播接收器中的应用程序类

android - 应用程序在后台被杀死时的应用程序生命周期

Android 生命周期 - ActivityManager 终止进程 -> 从后台返回时出现异常

android - 在 addThis android 应用程序中添加签名

javascript - 调用一个打开 Activity 并将 Activity 结果返回给 JavaScript 的 Java 函数