SDK接入必备常识——了解横竖屏切换
在游戏开发中,Android平台的apk包,我们经常会遇到横竖屏切换的时候,游戏莫名其妙的闪退了,抑或是莫名其妙地重启了。那这到底是啥问题引起的呢。在Google自带的文档中,我们发现,如果Resources.Configuration中的属性发生变化,那么所有UI上的元素都需要适应新的配置。而之前Activity的生命周期中,我们说道,Activity是与用户交互最直接的载体,它也就承担起了对应这些情况的责任。
除非你特殊指定,否则当配置发生改变 (比如语言,屏幕方向,输入设备等配置),当前的Activity将会被销毁,生命周期将会被重新执行,来重新加载适应新的配置的资源。
然而,在有些情况下,我们不希望在某些配置改变的时候,去重新执行一次生命周期。那么我们就需要通过Activity的android:configChanges属性来达到这个目的。如果改变了配置,出现在android:configChanges里面,那么Activity的生命周期不会被重新执行,而只会调用Activity的onConfigurationChanged(Resources.Configuration)方法。但是如果android:configChanges里面没有定义某项改变了的配置,那么如果该配置被改变了,那么Activity的生命周期一样会被重新执行。
那么在使用u8sdk接入SDK的过程中,如果遇到这类情况,需要检查下activity的android:configChanges属性。
比如如果我们不希望在横竖屏切换的时候,那么我们就需要在AndroidManifest.xml的Activity中增加android:configChanges属性的配置。设置android:configChanges=”orientation|keyboardHidden”,这样切换横竖屏就不会重启activity了。只会调用onConfigurationChanged方法。
但是,自从Android 3.2(API 13),在设置Activity的android:configChanges=”orientation|keyboardHidden”后,还是一样 会重新调用各个生命周期的。因为screen size也开始跟着设备的横竖切换而改变。所以,在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置”orientation”, 你还必须设置”ScreenSize”。
解决方法:
AndroidManifest.xml中设置android:configChanges=”orientation|screenSize”
关于横竖屏切换导致的生命周期方法调用的次序和细节可以参考这篇文章:
本文出自 U8SDK技术博客,转载时请注明出处及相应链接。
本文永久链接: http://www.uustory.com/?p=1555