假设我从Animated.timing().start()
开始制作动画,无论何时(在挂载或某些外部事件上)都没关系。然后,我使用Animated.View
渲染动画。
假设它在卸载组件之前没有完成。
我应该在卸载时显式调用动画(实际上,所有仍在运行的动画)上的stop()
还是隐式清除它?大多数手动分配的资源不会被隐式释放(除非它们像钩子一样被附加到组件上),但似乎就像动画一样。
答案 0 :(得分:3)
我没有找到任何相关文档,但是浏览了我们所使用版本(0.59.8)的代码。
简短的回答是否,不需要显式停止动画,它由React Native管理。
长答案在下面我的代码分析之后。
当启动某个值的动画时,该动画将绑定到Animated.Value
。 (以_animation
或_tracking
的形式。)
在Animated.Value
上使用Animated.Component
时,该值作为_propsAnimated
附加到组件上。
在componentWillUnmount _propsAnimated
上进行__detach
编辑,并且__detach
上的Animated.Value
通过调用Animated.Value.prototype.stopAnimation
(这是一个公共函数)来停止动画。 Animated.Value)。
答案 1 :(得分:2)
好问题。我的拙见是-否。正如您可能读过react-native docs一样,没有提及您应该这样做以及何时应该这样做。 如文档所述:
通过在动画上调用start()来启动动画。开始() 接受完成回调,当动画为 完成。如果动画正常运行完成,则完成 回调将使用{finished:true}进行调用。如果动画是 这样做是因为stop()在完成之前已被调用(例如 因为它被手势或其他动画打断了),那么它 将收到{完成:错误}。
由此,我想说的是,当卸载组件时,动画会中断。就个人而言,我没有在应用程序中使用stop()
,也从未因此而面临过内存泄漏。如果您尝试更改start()
回调函数中的组件状态,则可能会出现问题。这就是回调函数的finished
属性出现的地方。额外参考here。