Tephra
Tephra
  • 发布:2022-07-27 17:39
  • 更新:2023-07-12 14:53
  • 阅读:449

【报Bug】app端使用css的animation或者使用uni.createAnimation实现动画轮播效果时导致内存泄漏

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10

HBuilderX类型: 正式

HBuilderX版本号: 3.4.18

手机系统: Android

手机系统版本号: Android 8.0

手机厂商: 安卓设备

手机机型: 模拟器和安卓设备

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
**css动画代码**  

.animation-alarm {  
  margin-left: 2px;  
  width: 200px;  
  height: 200px;  
  background: salmon;  
  animation: a-alarm 3s linear infinite;  
  animation-delay: 3s;  
}  

@keyframes a-alarm {  
  0% {  
    transform: translateY(0%);  
  }  
  99% {  
    transform: translateY(-100%);  
  }  
  100% {  
    transform: translateY(0%);  
  }  
}  

**uni.createAnimation代码**  

animation.value = uni.createAnimation();  
    setInterval(() => {  
      animation.value.translateY(0).step({  
        duration: 0,  
        timingFunction: 'linear',  
        delay: 0  
      });  
      animation.value.translateY(-childHeight.value).step({  
        duration: timeGap.value,  
        timingFunction: 'linear',  
        delay: 0  
      });  

      animation.value.translateY(0).step({  
        duration: 0,  
        timingFunction: 'linear',  
        delay: 0  
      });  
      animationData.value = animation.value.export();  
    }, 10 * 1000);  

操作步骤:
1、app端使用css的animation或者使用uni.createAnimation实现简单动画轮播效果;  
2、打包安装或者直接运行到安卓基座时,通过adb指令**adb shell dumpsys meminfo io.dcloud.HBuilder**观察到**Native Heap**的值逐渐增大;  
3、不使用动画后**Native Heap**的值维持在正负100kb的正常范围内波动;  
4、两种动画方式都会导致内存逐渐增大  

注:项目里所有的定时器均已关闭,测试时控制的唯一变量就是动画的打开和关闭。个人怀疑编译成安卓平台时,动画引擎相关源码有内存泄漏

预期结果:
打开app长驻,无操作情况下,动画正常执行,内存只在一定范围内波动

实际结果:
无操作情况下,无操作放置一个晚上后堆内存不断增大,最终导致app崩溃(安卓系统弹窗提示“应用无响应”)。  
关闭动画的情况下,无操作放置一个晚上,第二天app依旧正常运行(已反复测试了4次)

bug描述:

app端使用css的animation或者使用uni.createAnimation实现轮播效果时导致内存泄漏(uniapp核心包版本3.0.0-alpha-3040820220424001)
2022-07-27 17:39 负责人:无 分享
已邀请:
8***@qq.com

8***@qq.com - 80后

有什么解决方案吗,官方自己的 uni-notice-bar 也是这样。

公司场景是展示屏,经常卡死没响应,就是文字不滚动,右上角的每秒刷新的时间也不会动了。

要回复问题请先登录注册