uni-app List装video组件滚动多了溢出,出现WX_RENDER_ERR_LAYER_OVERFLOW错误:Layer overflow limit error 20 layers

uni-app List装video组件滚动多了溢出,出现WX_RENDER_ERR_LAYER_OVERFLOW错误:Layer overflow limit error 20 layers

28 回复

bug已修复

更多关于uni-app List装video组件滚动多了溢出,出现WX_RENDER_ERR_LAYER_OVERFLOW错误:Layer overflow limit error 20 layers的实战教程也可以访问 https://www.itying.com/category-93-b0.html


没人吗?

来个人啊

昨天封装的list 视频滚动播放 今天测试了下好像也有你说的问题 应该真是bug

3.1.22这个版本打包倒是没有,但还是有其他视频bug

你好 你方便提供下的bug代码,给工程师排查吗 我这个太难剥离了。

请提供一下示例demo 附件

工程师代码有点多,不太好剥离。你可以list装video 滚动20-30次 在安卓手机上 必出这个bug

然后就是app就是卡死或者闪退

回复 a***@helloyun.cn: 问题是有些情况不复现不了。依赖场景 你截图报的是层级越界了,得看你具体代码结构

你可以写个极简demo试下看看还否复现

回复 DCloud_Android_ST: 剥离出来了,工程师能加我qq 我私发给你吗

回复 DCloud_Android_ST: 有些代码比较敏感

我也遇到同样的问题,nvue页面list循环遍历多个video就会直接卡死,闪退。

https://ext.dcloud.net.cn/plugin?id=1006
这个有个示例,你可以下载研究一下,不知道为啥他这个可以一直渲染video标签,如果找到问题了希望可以告诉我一下,我也被这个问题困扰好久了

bug 已确认,下个alpha 版本会修复

请问一下,现在最新版的工具还是有这个问题。请问一下,大概啥时候解决这个bug呢,谢谢

回复 [已删除]: 楼主的问题 已修复。你和他不是一个问题。 单独提一个ask

为啥我也报这个错,不是已经修复了吗

回复 lihailan: 楼主的问题 我以与提问者确认修复。你和他不是一个问题。 单独提一个ask

我现在也遇到了这个问题,Bug解决了么

16:40:14.529 reportJSException >>>> exception function:draw android view, exception:WX_RENDER_ERR_LAYER_OVERFLOWLayer overflow limit error: 16 layers!
Android的问题还是存在!

未必是一个问题。 如果你的手机是android 8.0以下。 设置一下codec=“software” 看看能否恢复正常

回复 DCloud_Android_DQQ: 加上 codec=“software” ,是正常的

回复 风云21: 对,加上后正常!

请问作者list加载video是怎么回收的,我加载差不多20条视频APP就闪退了

我目前也有这个问题,请问你解决了吗?

在 uni-app 中使用 <list><scroll-view> 内嵌大量 <video> 组件时,出现 WX_RENDER_ERR_LAYER_OVERFLOW 错误,是因为微信小程序底层对渲染层数量有硬性限制(通常为 20 层)。每个 <video> 组件在小程序中会单独占用一个渲染层,当快速滚动导致同时存在的视频组件层数超过限制时,就会触发此错误。

核心解决方案是减少同时渲染的 <video> 组件数量,常用方法如下:

  1. 使用 wx.createVideoContext 进行视频实例管理
    通过 createVideoContext 动态控制视频播放,避免每个 <video> 组件长期占用渲染层。可以在滚动时暂停不可见区域的视频,并销毁其上下文,减少活跃层数。

  2. 列表项复用与懒加载
    <list> 或自定义滚动区域中,通过 onScroll 事件监听滚动位置,结合 uniapp<recycle-list>(如支持)或手动实现虚拟列表,仅渲染可视区域及附近的少量 <video> 组件。非可视区域的视频组件用 <image> 等轻量组件替代。

  3. 优化 video 组件属性
    设置 lazy-load 属性为 true,延迟视频加载;在滚动时通过 v-if:show 动态隐藏不可见的视频组件,直接移除节点而非仅隐藏。

  4. 降低同时播放的视频数量
    确保同一时刻只有一个视频处于播放状态,可通过全局管理播放状态,在播放新视频时暂停其他视频。

  5. 分页加载数据
    如果列表数据量极大,采用分页加载,避免一次性渲染过多 <video> 组件。

示例代码片段(基于 scroll-view 动态控制)

<scroll-view @scroll="handleScroll">
  <view v-for="(item, index) in visibleList" :key="item.id">
    <video 
      v-if="isVideoVisible(index)" 
      :src="item.src" 
      :id="'video-' + item.id"
      lazy-load
    />
    <image v-else :src="item.poster" />
  </view>
</scroll-view>
export default {
  data() {
    return {
      visibleRange: { start: 0, end: 5 } // 仅渲染可视区域附近5个视频
    }
  },
  methods: {
    handleScroll(e) {
      // 计算当前可视区域索引,更新 visibleRange
      // 通过 wx.createVideoContext 管理视频播放/暂停
    }
  }
}
回到顶部