【问题标题】:Android - onConfigurationChanged() being called before onResume() after pausing ActivityAndroid - 暂停活动后在 onResume() 之前调用 onConfigurationChanged()
【发布时间】:2012-01-25 14:06:43
【问题描述】:

在我的 Activity 中,我在播放视频时覆盖了 onConfigurationChanged() 方法,并且我不想等待一秒钟,直到我更改设备方向后系统再次准备好继续播放视频。这工作得很好 - 我的视频继续流畅播放并且方向发生变化,而视频被重新调整以适合屏幕尺寸。

但我在执行这些步骤时发现了一个错误:

  1. 我在视频播放期间暂停了我的应用程序
  2. 我改变方向
  3. 我“恢复”我的应用程序

首先发生的事情:onConfigurationChanged() 被调用,而不是 onResume(),之后我的所有字段都应该被恢复!这会导致异常,其原因是除以零 - 某些字段等于 0,因为它尚未恢复。当然,这不是理想的行为。我的应用在以与暂停时相同的方向恢复时可以正常工作。

不过,我可以通过使用布尔值指示我的 Activity 是否已“完全加载”来规避这一点——也就是说,onResume() 方法已被调用。但我认为这不是一个非常干净的解决方案。

我的问题是:

  1. 这是预期的行为吗?我认为在 onResume() 之前调用 onConfigurationChanged() 很奇怪。这是一个错误吗?
  2. 我可以通过编程方式暂时“取消注册”我的应用程序,使其不再监听 onConfigurationChanged()(例如,在 onPause() 方法中取消注册)吗?由于此方法不会被调用,因为您必须为其注册一些侦听器,而是因为您在 AndroidManifest.xml 文件中放入了这一行而被调用:

    android:configChanges="orientation"

【问题讨论】:

    标签: android


    【解决方案1】:

    1- 回答http://developer.android.com/reference/android/app/Activity.html

    在某些特殊情况下,您可能希望绕过重新启动您的 基于一种或多种类型的配置更改的活动。这是 使用清单中的 android:configChanges 属性完成。对于任何 您说在那里处理的配置更改类型,您将 接听您当前活动的电话 onConfigurationChanged(Configuration) 方法而不是被 重新启动。如果配置更改涉及您不涉及的任何内容 处理,但是,活动仍将重新启动,并且 onConfigurationChanged(Configuration) 不会被调用。

    因此,在再次开始活动之前调用 onconfugrationchanged 以允许更改是正常的。 2-我不确定这个..

    【讨论】:

    • 这不是我的问题的答案。我知道如果我的应用程序正在运行并且我覆盖 onConfigurationChanged(),则不会调用 onResume()。这个问题是在我的应用程序暂停时改变方向的上下文中提出的 - 因此, onResume() 应该在恢复时被调用。它确实被调用,但不是在 onConfigurationChanged() 之前调用,这就是问题所在。我已经浏览了您提供的文档,所以这并没有启发我,但还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多