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 回复
就这段日志来说,可能是这个三方库内部的问题。
暂时没有遇到, 可以把你这个json发出来看看,
在HarmonyOS Next中,@ohos/lottie-turbo播放动画崩溃可能由以下原因导致:
- 动画JSON文件格式或路径错误;
- 资源文件过大或内存占用过高;
- 组件生命周期管理不当,如页面销毁后动画未停止;
- Lottie库版本与系统版本不兼容。
建议检查动画资源、优化内存使用,并确保在页面生命周期中正确管理动画实例。
根据你提供的崩溃日志,这是一个典型的SIGSEGV(段错误)问题,发生在图形渲染层。从堆栈信息看,崩溃点位于libdgles.z.so的eglSwapBuffers函数中,最终由liblottie-turbo.so的渲染流程触发。
问题分析:
- 根本原因:崩溃发生在GPU图形缓冲区交换(
eglSwapBuffers)时,表明可能是GPU资源(如纹理、帧缓冲区)管理异常,导致访问了无效内存地址。 - 触发条件:你提到播放12-14次后崩溃,这高度指向资源泄漏或内存累积耗尽。每次动画播放可能未正确释放GPU相关资源(如Surface、纹理),重复累积后导致系统无法分配新资源,从而在交换缓冲区时发生段错误。
- 堆栈指向:崩溃链从
liblottie-turbo.so的RenderGpuFlash和RenderTree函数开始,说明问题与Lottie Turbo模块的GPU加速渲染直接相关。
可能原因及排查方向:
- GPU资源泄漏:
LottieView在多次创建/销毁或重复播放时,对应的GPU资源(如OH_Drawing_Surface)未随组件生命周期正确释放。 - 动画文件问题:使用的
living_icon.json文件可能存在复杂图层或特效,在GPU渲染路径下触发驱动兼容性问题。 - 并发渲染冲突:若多个
LottieView实例同时渲染,可能引发GPU资源访问竞争。
建议尝试的解决方案:
- 严格管理生命周期:确保
LottieView所在的组件销毁时,主动调用controller的销毁方法,并移除动画监听器。 - 限制重复播放:在
listener的onFinished回调中检查播放次数,达到一定次数后尝试重建组件或暂停播放。 - 降级渲染模式:尝试关闭GPU加速(如果API支持),或使用
useCache: false避免缓存累积。 - 简化动画:检查JSON文件大小和图层复杂度,可尝试简化动画或使用其他格式(如WebP序列帧)作为临时替代。
- 更新SDK版本:确认使用的
@ohos/lottie-turbo和HarmonyOS SDK是否为最新版本,此类问题可能在后续版本中修复。
临时规避方案:
若问题紧急,可考虑在播放10次左右后主动销毁并重新创建LottieView组件,强制释放GPU资源。
此问题需要结合具体场景进一步分析资源泄漏点,建议在DevEco Studio中开启GPU调试工具监测渲染资源变化。


