浅谈android设备的横竖屏切换对Activity的影响有哪些?

设备横竖屏切换的前置条件:设备开了 '自动旋转'

背景:在安卓设备上,几乎任何与用户交互的场景呈现,均需要依附一个Activity实例,而Activity的生命周期,在正常不做任何处理下【清单文件和代码均未做处理】是受到设备的横竖屏切换影响的。

表现为:横竖屏切换时,Activity会经历onDestroy-->onCreate,意味着当前的Activity在销毁后重建了。如果该Activity承载的数据比较大【例如UI复杂、业务数据处理量大】,当设备的性能跟不上时,这种情况下,横竖屏切换过程中会引起黑屏迹象或者出了某些问题。

如何规避横竖屏切换时,Activity销毁重建问题?这里列举两种方法

1、在清单文件上,给该Activity注册时,添加      

android:configChanges="orientation|keyboardHidden|screenSize" 属性即可。

在这种情形下,如果该Activity存在业务想要适配横竖屏变化的,需要在该Activity源码文件中,重写 onConfigurationChanged()方法 (这个方法是监听横竖屏切换时回调的一个方法),做相应的业务/逻辑适配即可。例如,有的业务要求横竖屏分别展示不同的UI效果的,建议在res下分别建layout-landlayout-port两个文件夹,把横屏和竖屏的布局文件放入对应的layout文件夹中【布局文件名尽量要一致】

2、在清单文件中该Activity注册时,添加

android:screenOrientation="xx" 属性来指定Activity方向 (例如是竖屏portrait或者横屏landscape)或者在源代码中调用了setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE 或SCREEN_ORIENTATION_PORTRAIT)方法显式指定了方向 (两处都设置了-以代码里设置的为准)

这样配置后该Activity的生命周期和方向均不受设备横竖屏切换影响。第二种方式,无法适配横竖屏下不同的样式呈现。适合比较单一UI呈现的场景。

选择哪种方式,需要根据自身业务来决定。

总结影响:

1、对Activity生命周期有影响,需适配

2、对自定义相机预览画面【如拍照、录像、直播推流场景】有很大影响,需要做很多纠正工作。

     如果想少做工作,建议相机预览页面,固定一个Activity方向。

3、如果有业务想要实现Activity方向随用户调整设备方向变化而变化,一般是通过清单

     配置该Activity的属性:android:screenOrientation="fullSensor" 或在该Activity创建时onCreate 

     方法中调用 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR)

    即可。该方法无需关注设备的 “自动旋转” 开关是否开启。如果业务要适配横竖屏,适配工作是 

    少不了的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值