美文网首页技术方案Android
Android 解决类似直播界面横竖屏切换导致界面销毁重建的一种

Android 解决类似直播界面横竖屏切换导致界面销毁重建的一种

作者: lucasDev | 来源:发表于2020-06-15 14:09 被阅读0次

    例如一般的直播界面里面业务和SDK代码都比较厚重,而手机直播基本都会有竖屏观看与横屏观看,如果不经过特殊处理用户在切换横竖屏的时候就会导致Activity生命周期重走,一来回造成界面切换时有短暂闪屏,二来SDK和业务代码有重走一次,导致资源浪费和不良的用户体验。

    还有一点涉及到连麦时,切换横屏重走生命周期回导致失去连麦用户的链接,用户必须重新连麦才能加入进来。

    如何处理以上问题呢?
    有两个出发点:
    1.如何在切换横竖屏后不重走生命周期。
    2.如果不重走生命周期如何切换到对应的横竖屏布局

    Tip:布局切换会导致界面的事件失效,并且直播控件功能失效,后面会有处理方案。

    第一步

    切换横竖屏后禁止重走生命周期
    在AndroidManifest.xml中的对应Activity加入configChange属性,并且配置android:configChanges="keyboardHidden|orientation|locale|screenSize"
    如下:

     <activity
                android:name=".tencent.TICClassActivity2"
                android:configChanges="keyboardHidden|orientation|screenSize"
                android:windowSoftInputMode="stateAlwaysHidden|adjustResize" />
    

    第二步

    在Activity中重写onConfigurationChanged方法,按照以上配置完清单文件后在切换横竖屏时就不会重走生命周期了,并且会调用onConfigurationChanged方法。

    这样又产生了一个新的问题,按照上面配置后横竖屏切换后系统没有自动帮我们切换layout-land文件夹中的布局,这个就需要我们自己手动来切换了。

    第三步

    在Activity中重写onConfigurationChanged方法中获取横竖屏事件

     @Override
        public void onConfigurationChanged(@NonNull Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
            if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {//横屏
      
            } else {//竖屏
            }
        }
    
    

    在竖屏布局中也就是res/layout对应的activity XML中的根布局外嵌套一层FrameLayout,并且设置id.
    如下:


    image.png

    第四步

    将layout-land中对应的横屏布局复制到layout中,并且重命名(防止文件重复)。


    image.png

    第五步

    在横竖屏切换事件回调中切换布局


    image.png

    Tip:activity_tic_class_one.xml是竖屏布局,activity_tic_class_one_landscape.xml是横屏布局,这两个文件都是存在res/layout中,而不是res/layout-land。switchRootLayout()是处理根布局内容替换,并且将直播控件转移到另一个根布局上,添加懂啊另个容器之前需要先移除当前控件的父容器关联。还有一点很重要,因为切换了根布局,所有旋转屏幕之前针对View的事件都失效了,需要重新绑定事件.

    总结:该思路的核心思想是先取消横竖屏重建Activity的机制,再手动切换横竖屏对应的布局,并且将直播View抠出来放到新的layout对应位置中,这样就避免了重新初始化直播SDK流程了。

    相关文章

      网友评论

        本文标题:Android 解决类似直播界面横竖屏切换导致界面销毁重建的一种

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