• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

在Activity和附贴的Fragment中同时使用多Surface错乱解决

android 搞代码 4年前 (2022-03-01) 10次浏览 已收录 0个评论

SurfaceView因为独特的双缓冲机制,在android利用中非常广泛,视频播放器、摄像机预览等都会用到,如果在两个Fragment或者一个Fragment和Activity同时应用都会造成无奈失常显示。即便设置后面的SurfaceView为不可见也会在少部分机型上仍然存在该问题。起初发现起因是SurfaceView是在Windows层显示的,仅仅用View层的办法并不能管制Surface的生命周期。
解决办法:在须要播放视频的地位外层嵌套一个Layout,这里我用的Framelayout,在开释的时候应用removeAllViews间接开释SurfaceView和他的Surface对象,上面代码:

/**
 * 开释资源
 */
 private void release() {
    if (mSurfaceView != null && mSurfaceView.getHolder() != null && mSurfaceView.getHolder().getSurface() != null) {
        mSurfaceView.getHolder().getSurface().release();
        if (mSurfaceHolder != null && mEquipmentVideoCallBack != null) {
            mSurfaceHolder.removeCallback(mEquipmentVideoCallBack);
            mSurfaceHolder = null;
        }
    }
    parentLayout.removeAllViews();
 }

须要留神的是,只有界面不在前台或者失去焦点的时候都须要开释一次,还有每次从新播放前也须要开释一次,从新进入筹备状态。

//第1:显示个暗藏的时候
 @Override
 public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
    release();
 }
   
//第2:从新获取焦点到前台
 @Override
 public void onResume() {
    super.onResume();
    release();
}
   
//第3:在相似视频播放器性能的时候一个视频播放完也须要开释

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:在Activity和附贴的Fragment中同时使用多Surface错乱解决
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址