RiveError:动画缓存溢出:同一 RiveArtboard 中活动动画过多
RiveError: Animation cache overflow: too many active animations in the same RiveArtboard
ID: flutter/rive-animation-cache-overflow
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| Flutter 3.22 | active | — | — | — |
| Dart 3.4 | active | — | — | — |
| rive_common 0.4.0 | active | — | — | — |
| flare_flutter 3.0.0 | active | — | — | — |
根因分析
Rive 动画运行时对每个 Artboard 同时播放的动画数量有限制(默认约 64 个),当启动许多动画而未停止之前的动画时,会超过该限制。
English
The Rive animation runtime has a limit on the number of simultaneously playing animations per Artboard (default ~64), which is exceeded when many animations are started without stopping previous ones.
官方文档
https://pub.dev/packages/rive解决方案
-
Stop animations before playing new ones: `artboard.animations.forEach((a) => a.stop()); artboard.animationByName('newAnimation')?.play();` -
Implement a pooling mechanism that reuses animation instances: maintain a list of active animations and remove completed ones using `animation.isActive` check.
-
Use `artboard.animations.clear()` to remove all animation states before loading a new set of animations in a scene transition.
无效尝试
常见但无效的做法:
-
85% 失败
Modifying third-party library source is not maintainable and will be overwritten on package updates; also, increasing cache size may cause memory pressure.
-
90% 失败
The runtime does not automatically clean up old animations; each new `play()` call adds to the cache without removing previous instances.
-
70% 失败
Rive animations are independent; a single controller cannot manage multiple simultaneous animations with different timelines.