Activity.isChangingConfigurations()

作者: rain 分类: ApiTips 发布时间: 2013-10-22 14:00 6 条评论

isChangingConfigurations()函数在是Api level 11(Android 3.0.x) 中引入的,该函数的官方文档如下:

Check to see whether this activity is in the process of being destroyed in order to be recreated with a new configuration. This is often used in onStop() to determine whether the state needs to be cleaned up or will be passed on to the next instance of the activity via onRetainNonConfigurationInstance().

Returns
  • If the activity is being torn down in order to be recreated with a new configuration, returns true; else returns false.

也就是用来检测当前的Activity是否 因为Configuration的改变被销毁了,然后又使用新的Configuration来创建该Activity。 常见的案例就是 Android设备的屏幕方向发生变化,比如从横屏变为竖屏。

该函数的使用场景就如其Api docs中描述的一样。通常在onStop()函数中通过该函数来判断当前的Activity是否正在改变Configuration,从而来决定该Activity中引用的一些资源该如何处理,比如:一些比较耗时的资源,如果在onStop()中发现isChangingConfigurations()的返回值为false,则说明该Activity被暂停了,暂时不需要使用该资源了,则可以释放引用的资源;如果isChangingConfigurations()返回值为true,则说明该Activity正在被销毁然后重新创建一个新的 ,这种情况下引用的资源还需要马上用到(在新创建的Activity中),这样可以先不释放该资源,当新的Activity创建好后,则可以立即使用该资源。

 

看起来该Api还是很有用的! 但是在 pre-11 版本中咋办呢?

Steve Liles 给出了一个参考的方案,具体实现是,创建一个几类继承自FragmentActivity类,并覆写该类的两个函数:

  1. onSaveInstanceState – 覆写该函数,并设置 isConfigChange为 true.
  2. isChangingConfigurations – 覆写该函数,返回值根据API版本来决定是返回 super.isChangingConfigurations() 还是 isConfigChange的值。

但是上面的方法有个比较大的限制:只有当 onPause调用完成后,onSaveInstanceState函数才会执行。所以,在API 11 之前的版本中, 只有在onStop函数中调用isChangingConfigurations()函数才能返回正确的值。 

示例代码如下:

 

 

本文出自 云在千峰,转载时请注明出处及相应链接。

本文永久链接: http://blog.chengyunfeng.com/?p=528

Ɣ回顶部