HarmonyOS鸿蒙Next中你们有没有试过@ohos/lottie-turbo播放动画崩溃的问题呀

HarmonyOS鸿蒙Next中你们有没有试过@ohos/lottie-turbo播放动画崩溃的问题呀 @ohos/lottie-turbo,播放12-14次就会导致app崩溃闪退

LottieView({
  lottieId: `lottie${this.currentIndex}`,       // 唯一动画标识
  path: $rawfile('lottie/living_icon.json'), // 动画路径(推荐放入resources/rawfile目录)
  loop: true,                // 循环播放
  autoplay: true,            // 自动播放
  useCache: true,
  controller: this.controller,
  listener: this.listener
})
.width(30)
.height(20)
Reason:Signal:SIGSEGV(SEGV_MAPERR)@0xffffffffffffffff

Fault thread info:
Tid:425, Name:
#00 pc 00000000001951d2 /system/lib64/libdgles.z.so(d_eglSwapBuffers_special(void*, void*, void*)+1266)(6f75e5b596b5cf41e7707e51a56bfda3)
#01 pc 000000000017e198 /system/lib64/libdgles.z.so(eglSwapBuffers+568)(6f75e5b596b5cf41e7707e51a56bfda3)
#02 pc 000000000003122a /system/lib64/libEGL.so(eglSwapBuffers+202)(1e3ffea694dded9852b19c5cc2d681d9)
#03 pc 0000000000782893 /system/lib64/librender_service_base.z.so(OHOS::Rosen::RenderContext::SwapBuffers(void*) const+115)(dd59f135478b5c9b75a3fe8d4b112c15)
#04 pc 000000000003f3f7 /system/lib64/libnative_drawing_ndk.z.so(OHOS::Rosen::DrawingSurfaceUtils::FlushSurface(OHOS::Rosen::Drawing::Surface*)+807)(8dddd51c21c2e909d3bff8e6e914581f)
#05 pc 000000000003a12a /system/lib64/libnative_drawing_ndk.z.so(OH_Drawing_SurfaceFlush+10)(8dddd51c21c2e909d3bff8e6e914581f)
#06 pc 00000000000c5d6e /data/storage/el1/bundle/libs/x86_64/liblottie-turbo.so(LottieTurbo::LottieGpuFun::RenderGpuFlash(OH_Drawing_Surface*)+14)(2650eaed7677b15c8dc76eef1fe08bdbfbff1c04)
#07 pc 00000000000c443f /data/storage/el1/bundle/libs/x86_64/liblottie-turbo.so(LottieTurbo::LottieRender::RenderTree(std::__n1::basic_string<char, std::__n1::char_traits<char>, std::__n1::allocator<char>>, LOTLayerNode const*, LottieTurbo::CalculatePosition*, float)+799)(2650eaed7677b15c8dc76eef1fe08bdbfbff1c04)
#08 pc 00000000000c527d /data/storage/el1/bundle/libs/x86_64/liblottie-turbo.so(LottieTurbo::LottieRender::Render(std::__n1::basic_string<char, std::__n1::char_traits<char>, std::__n1::allocator<char>>, LOTLayerNode const*, LottieTurbo::CalculatePosition*, float)+93)(2650eaed7677b15c8dc76eef1fe08bdbfbff1c04)
#09 pc 00000000000c3088 /data/storage/el1/bundle/libs/x86_64/liblottie-turbo.so(2650eaed7677b15c8dc76eef1fe08bdbfbff1c04)
#10 pc 00000000000c33ce /data/storage/el1/bundle/libs/x86_64/liblottie-turbo.so(2650eaed7677b15c8dc76eef1fe08bdbfbff1c04)
#11 pc 000000000009c3d1 /data/storage/el1/bundle/libs/x86_64/liblottie-turbo.so(2650eaed7677b15c8dc76eef1fe08bdbfbff1c04)
#12 pc 000000000011f7f7 /system/lib/ld-musl-x86_64.so.1(5cb21448977651a6193b90e9d63f0f76)
#13 pc 00000000000893fe /system/lib/ld-musl-x86_64.so.1(5cb21448977651a6193b90e9d63f0f76)
Registers:
  rax:ffffffffffffffff rdx:0000000de7100ee8 rcx:00007fa461df7128 rbx:0000000000000061
  rsi:0000000000000000 rdi:00007fa461df7110 rbp:00007fa461df7120 rsp:00007fa44597f4a0
  r8:00007fff0051d0b0 r9:0000000000000010 r10:000000000000e93f r11:00007fff0051d080
  r12:0000000000000069 r13:00007fa46d60a470 r14:000036a6000001b0 r15:0000000000000000 rip:00007fa4577551d2

更多关于HarmonyOS鸿蒙Next中你们有没有试过@ohos/lottie-turbo播放动画崩溃的问题呀的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

您好,这边没有复现您的问题,请问可以提供下可以复现问题的demo嘛

"@ohos/lottie-turbo": "^1.0.8"

DevEco Studio 6.0.1 Release

import { LottieController, LottieView } from '@ohos/lottie-turbo';

@Entry
@Component
struct LottiePage {
  private controller: LottieController = new LottieController();
  build() {
    Column() {
      LottieView({
        lottieId: "lottie1", //动画id,需要保证唯一性
        loop: true, //是否循环播放,非必须,默认为true
        autoplay: true, //是否自动播放,非必须,默认为true
        autoSkip: true, //不可见时是否自动跳过渲染,非必须,默认为true
        path: $rawfile('tabBar.json'), //通过rawfie文件播放
        controller: this.controller, //lottie动画控制器
      })
        .width(160)
        .height(160)
        .onClick(() => {
          this.controller.togglePause(); //控制动画播放暂停
        })
    }
    .height('100%')
    .width('100%')
  }
}

tabBar.json

{"v": "5.4.4","fr": 30,"ip": 0,"op": 30,"w": 93,"h": 93,"nm": "4","ddd": 0,"assets": [],"layers": [{"ddd": 0,"ind": 1,"ty": 4,"nm": "路径 2","sr": 1,"ks": {"o": {"a": 0,"k": 100,"ix": 11},"r": {"a": 0,"k": 0,"ix": 10},"p": {"a": 0,"k": [46.5,46.25,0],"ix": 2},"a": {"a": 0,"k": [0,0,0],"ix": 1},"s": {"a": 1,"k": [{"i": {"x": [0.667,0.667,0.667],"y": [1,1,1]},"o": {"x": [0.333,0.333,0.333],"y": [0,0,0]},"t": 0,"s": [100,100,100],"e": [120,120,100]},{"i": {"x": [0.667,0.667,0.667],"y": [1,1,1]},"o": {"x": [0.333,0.333,0.333],"y": [0,0,0]},"t": 8,"s": [120,120,100],"e": [90,90,100]},{"i": {"x": [0.667,0.667,0.667],"y": [1,1,1]},"o": {"x": [0.333,0.333,0.333],"y": [0,0,0]},"t": 16,"s": [90,90,100],"e": [100,100,100]},{"t": 22}],"ix": 6}},"ao": 0,"shapes": [{"ty": "gr","it": [{"ind": 0,"ty": "sh","ix": 1,"ks": {"a": 0,"k": {"i": [[0,0],[-0.03,0.06],[-0.04,0.08],[0,0],[0,0.02],[-0.05,0.14],[-0.01,0.02],[-0.03,0.12],[0.49,0.35],[0.1,0.02],[0.04,0],[0.07,0],[0.09,-0.01],[0.03,-0.01],[0.62,-0.8],[0.73,0.44],[0.04,0.02],[0,0],[0.13,0.06],[0.11,0.05],[0.16,0.05],[0.12,0.03],[0.19,0.03],[0.1,0.01],[0.31,0],[0.31,-0.04],[0.1,-0.02],[0.2,-0.06],[0.11,-0.04],[0.16,-0.07],[0.11,-0.06],[0.11,-0.06],[0,0],[0.08,-0.05],[0.33,0.35],[0.01,0.02],[0.69,-0.06],[0.04,-0.01],[0.05,-0.02],[0.05,-0.03],[0.02,-0.01],[0.02,-0.01],[0.02,-0.01],[0.04,-0.59],[0,-0.02],[0,-0.15],[-0.01,-0.03],[-0.25,-0.46],[-0.01,-0.02],[-0.01,0.01],[-0.04,-0.06],[0.59,-0.85],[0.01,-0.01],[0,0],[0.09,-0.14],[0.06,-0.12],[0.06,-0.17],[0.03,-0.12],[0.05,-0.2],[0.02,-0.1],[0,-0.33],[-0.02,-0.2],[-0.01,-0.07],[-0.03,-0.13],[-0.02,-0.07],[-0.04,-0.11],[-0.03,-0.08],[-0.04,-0.11],[-0.03,-0.07],[-0.06,-0.11],[-0.04,-0.06],[-0.04,-0.07],[-0.03,-0.04],[-0.03,-0.05],[-0.12,-0.15],[-0.02,-0.03],[-0.11,-0.12],[-0.05,-0.04],[-0.1,-0.09],[-0.06,-0.04],[-0.1,-0.06],[-0.07,-0.04],[-0.11,-0.06],[-0.07,-0.04],[-0.12,-0.06],[-0.06,-0.02],[-0.14,-0.05],[-0.05,-0.01],[-0.08,-0.02],[-0.11,-0.02],[-0.26,-0.05],[-0.04,-0.01],[-0.58,-0.05],[-0.19,-0.01],[-0.07,-0.01],[-0.41,0],[0,0],[-0.01,0],[-0.16,0],[-1.08,0.24],[-0.28,0.05],[-0.85,0.74],[-0.21,0.23],[0,1.67],[0.05,0.32],[0.02,0.06],[0,0],[0,-0.4],[1.66,-1.38],[1.42,-0.22],[0,0],[1.43,0],[1.38,0.35],[1.01,1.02],[0,2.04],[-0.94,1.25],[-1.23,0.89],[-1.47,-1.53],[-1.51,0],[-1.17,-0.71],[-1.15,-0.83],[1.25,-1.87],[0,0],[0.2,0.11]],"o": [[0.03,-0.05],[0.05,-0.07],[0,0],[0.01,-0.01],[0.08,-0.14],[0.01,-0.03],[0.04,-0.12],[0.24,-1.06],[-0.08,-0.06],[-0.04,-0.01],[-0.07,-0.01],[-0.08,0],[-0.03,0],[-0.7,0.1],[-0.28,0.35],[-0.03,-0.02],[0,0],[-0.12,-0.08],[-0.1,-0.06],[-0.16,-0.06],[-0.11,-0.04],[-0.18,-0.06],[-0.1,-0.02],[-0.29,-0.04],[-0.32,0],[-0.1,0.02],[-0.2,0.03],[-0.11,0.03],[-0.18,0.06],[-0.12,0.05],[-0.11,0.05],[0.01,0.01],[-0.08,0.05],[-0.64,0.42],[-0.02,-0.01],[-0.8,-0.8],[-0.04,0],[-0.06,0.01],[-0.06,0.02],[-0.02,0.01],[-0.02,0.02],[-0.02,0.02],[-0.23,0.17],[-0.01,0.02],[-0.01,0.13],[0,0.02],[0.03,0.48],[0.01,0.02],[0,0],[0.04,0.07],[0.18,0.26],[-0.01,0.01],[0,0],[-0.1,0.14],[-0.06,0.12],[-0.08,0.16],[-0.05,0.12],[-0.07,0.19],[-0.02,0.11],[-0.05,0.32],[0,0.2],[0,0.07],[0.02,0.13],[0.01,0.07],[0.02,0.12],[0.02,0.08],[0.04,0.11],[0.03,0.07],[0.05,0.11],[0.03,0.06],[0.04,0.08],[0.03,0.04],[0.03,0.05],[0.11,0.16],[0.02,0.02],[0.1,0.12],[0.05,0.04],[0.09,0.09],[0.06,0.04],[0.09,0.08],[0.06,0.05],[0.1,0.07],[0.06,0.03],[0.11,0.05],[0.06,0.02],[0.14,0.06],[0.05,0.02],[0.08,0.02],[0.1,0.03],[0.12,0.03],[0.03,0.01],[0.42,0.08],[0.19,0.02],[0.08,0.01],[0.33,0.01],[0,0],[0.01,0],[0.14,0],[1.27,-0.03],[0,0],[1.16,-0.22],[0.25,-0.2],[0.92,-1.03],[0,-0.34],[-0.01,-0.06],[0,0],[0.06,0.38],[0,2.3],[-1.04,0.87],[0,0],[-1.23,0.25],[-1.63,0],[-1.45,-0.33],[-1.35,-1.35],[0,-1.67],[-1.3,-1.88],[1.15,-0.84],[1.18,-0.73],[1.48,0],[1.46,-1.51],[1.21,0.88],[0,0],[-0.16,-0.26],[0,0]],"v": [[7.86,-3.92],[7.96,-4.08],[8.09,-4.31],[8.09,-4.31],[8.11,-4.36],[8.3,-4.78],[8.33,-4.86],[8.43,-5.22],[7.95,-7.66],[7.67,-7.78],[7.55,-7.8],[7.35,-7.83],[7.09,-7.81],[7.01,-7.8],[4.8,-6.44],[3.39,-6.39],[3.28,-6.45],[3.28,-6.45],[2.9,-6.64],[2.58,-6.81],[2.09,-6.98],[1.76,-7.09],[1.19,-7.21],[0.9,-7.27],[0,-7.33],[-0.94,-7.27],[-1.24,-7.2],[-1.84,-7.07],[-2.17,-6.95],[-2.68,-6.76],[-3.02,-6.58],[-3.35,-6.42],[-3.34,-6.41],[-3.58,-6.27],[-5.03,-6.61],[-5.08,-6.66],[-7.53,-7.82],[-7.64,-7.8],[-7.82,-7.76],[-7.97,-7.69],[-8.04,-7.66],[-8.09,-7.61],[-8.15,-7.57],[-8.6,-6.33],[-8.61,-6.26],[-8.61,-5.84],[-8.6,-5.77],[-8.18,-4.32],[-8.15,-4.25],[-8.14,-4.26],[-8.03,-4.05],[-8.15,-2.38],[-8.17,-2.35],[-8.17,-2.35],[-8.43,-1.92],[-8.63,-1.57],[-8.83,-1.06],[-8.97,-0.71],[-9.12,-0.11],[-9.19,0.2],[-9.26,1.17],[-9.23,1.77],[-9.21,1.97],[-9.14,2.37],[-9.09,2.59],[-9,2.94],[-8.93,3.17],[-8.81,3.5],[-8.72,3.71],[-8.55,4.04],[-8.45,4.23],[-8.32,4.45],[-8.24,4.57],[-8.15,4.72],[-7.8,5.18],[-7.74,5.24],[-7.41,5.6],[-7.26,5.73],[-6.98,5.99],[-6.8,6.12],[-6.51,6.33],[-6.32,6.46],[-6.01,6.65],[-5.81,6.76],[-5.47,6.92],[-5.28,7],[-4.86,7.15],[-4.72,7.2],[-4.47,7.26],[-4.15,7.34],[-3.57,7.46],[-3.45,7.49],[-1.91,7.7],[-1.34,7.74],[-1.12,7.76],[-0.03,7.79],[0,7.79],[0.03,7.79],[0.48,7.78],[4.03,7.37],[4.03,7.36],[7.09,5.88],[7.78,5.23],[9.26,1.17],[9.19,0.18],[9.14,0],[10.41,0],[10.5,1.17],[7.78,6.9],[4.03,8.59],[4.03,8.6],[0,9],[-4.57,8.49],[-8.32,6.41],[-10.5,1.17],[-9,-3.3],[-8.81,-8.6],[-4.09,-7.39],[0,-8.55],[4.04,-7.42],[8.73,-8.6],[8.96,-3.36],[8.39,-3.36],[7.86,-3.92]],"c": true},"ix": 2},"nm": "路径 1","mn": "ADBE Vector Shape - Group","hd": false},{"ty": "st","c": {"a": 0,"k": [0.0862749964,0.098039001226,0.129411995411,1],"ix": 3},"o": {"a": 0,"k": 100,"ix": 4},"w": {"a": 0,"k": 0.2,"ix": 5},"lc": 1,"lj": 1,"ml": 4,"bm": 0,"nm": "描边 1","mn": "ADBE Vector Graphic - Stroke","hd": false},{"ty": "fl","c": {"a": 0,"k": [0.0862749964,0.098039001226,0.129411995411,1],"ix": 4},"o": {"a": 0,"k": 100,"ix": 5},"r": 1,"bm": 0,"nm": "填充 1","mn": "ADBE Vector Graphic - Fill","hd": false},{"ty": "tr","p": {"a": 0,"k": [0,0],"ix": 2},"a": {"a": 0,"k": [0,0],"ix": 1}

更多关于HarmonyOS鸿蒙Next中你们有没有试过@ohos/lottie-turbo播放动画崩溃的问题呀的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


就这段日志来说,可能是这个三方库内部的问题。

暂时没有遇到, 可以把你这个json发出来看看,

在HarmonyOS Next中,@ohos/lottie-turbo播放动画崩溃可能由以下原因导致:

  1. 动画JSON文件格式或路径错误;
  2. 资源文件过大或内存占用过高;
  3. 组件生命周期管理不当,如页面销毁后动画未停止;
  4. Lottie库版本与系统版本不兼容。

建议检查动画资源、优化内存使用,并确保在页面生命周期中正确管理动画实例。

根据你提供的崩溃日志,这是一个典型的SIGSEGV(段错误)问题,发生在图形渲染层。从堆栈信息看,崩溃点位于libdgles.z.soeglSwapBuffers函数中,最终由liblottie-turbo.so的渲染流程触发。

问题分析:

  1. 根本原因:崩溃发生在GPU图形缓冲区交换(eglSwapBuffers)时,表明可能是GPU资源(如纹理、帧缓冲区)管理异常,导致访问了无效内存地址。
  2. 触发条件:你提到播放12-14次后崩溃,这高度指向资源泄漏内存累积耗尽。每次动画播放可能未正确释放GPU相关资源(如Surface、纹理),重复累积后导致系统无法分配新资源,从而在交换缓冲区时发生段错误。
  3. 堆栈指向:崩溃链从liblottie-turbo.soRenderGpuFlashRenderTree函数开始,说明问题与Lottie Turbo模块的GPU加速渲染直接相关。

可能原因及排查方向:

  • GPU资源泄漏LottieView在多次创建/销毁或重复播放时,对应的GPU资源(如OH_Drawing_Surface)未随组件生命周期正确释放。
  • 动画文件问题:使用的living_icon.json文件可能存在复杂图层或特效,在GPU渲染路径下触发驱动兼容性问题。
  • 并发渲染冲突:若多个LottieView实例同时渲染,可能引发GPU资源访问竞争。

建议尝试的解决方案:

  1. 严格管理生命周期:确保LottieView所在的组件销毁时,主动调用controller的销毁方法,并移除动画监听器。
  2. 限制重复播放:在listeneronFinished回调中检查播放次数,达到一定次数后尝试重建组件或暂停播放。
  3. 降级渲染模式:尝试关闭GPU加速(如果API支持),或使用useCache: false避免缓存累积。
  4. 简化动画:检查JSON文件大小和图层复杂度,可尝试简化动画或使用其他格式(如WebP序列帧)作为临时替代。
  5. 更新SDK版本:确认使用的@ohos/lottie-turbo和HarmonyOS SDK是否为最新版本,此类问题可能在后续版本中修复。

临时规避方案:
若问题紧急,可考虑在播放10次左右后主动销毁并重新创建LottieView组件,强制释放GPU资源。

此问题需要结合具体场景进一步分析资源泄漏点,建议在DevEco Studio中开启GPU调试工具监测渲染资源变化。

回到顶部