Flutter中需调用Dispose的对象有哪些?未释放会有何影响?
Flutter中需手动释放的对象清单及未释放后果
一、必须调用dispose()释放的对象类型
- 控制器类:
TextEditingController:文本输入控制器ScrollController:控制或监听滚动状态的控制器TabController:Tab页切换控制器PageController:页面切换控制器
- 流相关类:
StreamController:自定义流控制器(单订阅/广播流均需释放)StreamSubscription:流订阅对象,需手动取消订阅以释放资源
- 动画相关类:
AnimationController:动画控制器,动画结束或页面销毁时必须释放
- 资源监听/绑定类:
FocusNode:管理输入框焦点的节点Timer/PeriodicTimer:定时任务,页面销毁前需取消
- 第三方库对象:
- 地图控制器、视频播放器控制器等第三方SDK提供的对象(需遵循官方文档要求释放)
注意:并非有状态页面中所有变量都要释放,仅针对持有系统资源、后台任务、监听/流的对象,普通数据类(如字符串、自定义实体)无需处理。
二、不执行释放操作的后果
- 内存泄漏:未释放的对象无法被GC回收,长期积累会导致APP内存占用飙升,最终引发内存溢出崩溃。
- 后台逻辑残留:Timer、流订阅等未取消时,页面销毁后仍会执行逻辑,可能触发空指针异常或不必要的业务操作(如重复请求接口)。
- 系统资源浪费:动画控制器、焦点节点等占用的UI资源无法释放,会导致后续页面UI响应变慢,甚至出现焦点异常等问题。
- 系统杀进程:内存占用过高时,iOS/Android系统会发出内存警告,严重时直接终止APP进程,造成闪退。
内容的提问来源于stack exchange,提问作者Rory Prince
相关产品推荐
相关产品推荐

