title: 填坑--小米6X横竖屏切换
date: 2018-06-30 15:52:45
categories:
- Android
tags: - 横竖屏切换
话说,事出反常必有妖~
测试场景:测试手机小米6X,Activity A 为设备通道列表界面,其屏幕方向指定为portrait,其在AndroidManifest.xml中声明如下:
android:name=".module.channelNew.VideoChannelActivity"
android:screenOrientation="portrait"/>
Activity B为视频播放界面,其屏幕方向指定为横屏landscape,其声明如下:
<activity
android:name=".module.videoplay.VideoPlayActivity"
android:screenOrientation="landscape"/>
在大部分手机上测试,包括机型:小米6,华为nova3e, 小米2s 都符合正常现象:视频播放结束后,返回上个界面,屏幕由横屏切换为竖屏。一切都符合程序员的思维逻辑,在我手机上明明没有问题的啊~~然而,事情开始变得有趣了,在小米6X上居然崩溃了,查看log发现:在返回上个界面即Activity A的时候,先销毁了Activity A,然后重新创建,在重新创建的时候由于对资源没处理好,导致程序崩溃。
不得不说,Android系统碎片化很夸张,总能遇到各种奇怪的问题 ,查了资料,是在AndroidMainifest.xml中设置了android:screenOrientation = "portrait"后照理再设置
android:configChanges="orientation|screenSize|keyboardHidden"
应该不起效的,所以之前也并没有考虑设置这个。没办法,有bug总得解决,不能抱着侥幸的心态假想客户不是用小米6X的。。。
所以着手处理:先添加了上述代码:
android:configChanges="orientation|screenSize|keyboardHidden"
重新运行,居然不会挂了!!!内心本是有点小激动,但很快就发现了另一个现象。。。此处有gif图:
ezgif-1-8bc6a7cd29.gif
gif图可能有点模糊,跳转太快,没关系,待我慢慢道来:
首先是视频播放界面Activity B,按了回退返回上个界面Activity A(设备通道列表界面),此时ActivityA是竖屏的,但一秒后切换为横屏了,然后一秒后又切换为竖屏了,切得你无话可说,估计用户看到这一幕,存在感就--1了。
有现象了,就先从logcat去入手,首先在ActivityA加入如下代码:
@Override
public void onConfigurationChanged(Configuration newConfig) {
//0--undefined,1--portrait,2--landscape
super.onConfigurationChanged(newConfig);
Log.e(TAG, "onConfigurationChanged: " + newConfig.getLayoutDirection());
}
然后查看logcat:
log截图.png
发现是在视频播放界面ActicvityB调用onDestroy后,ActivityA回调了两次onConfigurationChanged,而且打出的getLayoutDirection居然都是未定义0。
结合刚刚上面的Gif图,ActivityA明明已经切换为竖屏了(其生命周期已经是onResume了),后面还切换了两次屏幕,就对应上这里的两次回调。那不让其回调不就不会出现上述问题了?
接着尝试:在ActivityB的onDestroy中添加如下代码
@Override
protected void onDestroy() {
//@modify 针对一些手机切换到上个界面后,横竖屏多次切换的问题
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
... ...
}
然后重新运行,问题解决了 ^_^
总结一下:主要是一些手机系统定制比较特殊,如果你也遇到了类似的问题,有不同的解决方法,欢迎共同交流 ^_^
网友评论