美文网首页androidwelldone--踩坑记
填坑--小米6X横竖屏切换

填坑--小米6X横竖屏切换

作者: Z梧桐听雨 | 来源:发表于2018-06-30 17:19 被阅读0次

    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);
           ... ...
    }
    

    然后重新运行,问题解决了 ^_^
    总结一下:主要是一些手机系统定制比较特殊,如果你也遇到了类似的问题,有不同的解决方法,欢迎共同交流 ^_^

    相关文章

      网友评论

        本文标题:填坑--小米6X横竖屏切换

        本文链接:https://www.haomeiwen.com/subject/xwotuftx.html