Android - onConfigurationChanged()在暂停Activity之后在onResume()之前被调用

时间:2012-01-25 14:06:44

标签: android

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

然而,当我采取这些步骤时,我发现了一个错误:

  1. 我在视频播放期间暂停了我的应用
  2. 我改变方向
  3. 我“恢复”我的应用
  4. 首先发生了什么:onConfigurationChanged()被调用,而不是onResume(),之后我的所有字段都应该被恢复!这会导致异常除以零作为原因 - 某些字段等于0,因为它尚未恢复。当然,这不是理想的行为。我的应用程序确实有效,当它以与暂停相同的方向恢复时。

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

    我的问题是:

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

      机器人:configChanges = “取向”

1 个答案:

答案 0 :(得分:1)

http://developer.android.com/reference/android/app/Activity.html

中的答案
  

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

所以通常会先调用onconfugrationchanged来允许在再次启动活动之前进行更改。 2-我不确定这个..