现有原生移动应用中嵌入Flutter模块的资源内存释放问题咨询
轻量集成Flutter模块内存泄漏解决方案
核心逻辑
轻量使用场景(非高频打开Flutter页面)下,不要全局复用Flutter Engine,每次打开创建独立实例,退出时按顺序销毁所有绑定关系,重点处理插件注册器带来的强引用问题,这是绝大多数场景下内存无法释放的核心原因。
iOS端优化方案
- 不要使用系统默认的全局
FlutterEngine单例,每次打开Flutter页面时临时创建独立的Engine实例,绑定到当前的FlutterViewController - 调整销毁时机和顺序:不要在
ViewDidDisappear中才开始清理,提前到viewWillDisappear阶段,先调用flutterViewController.engine.destroyContext(),再执行flutterViewController.removeFromParent(),最后将Flutter VC、Engine实例全部置为nil - 主动清理插件引用:使用
GeneratedPluginRegistrant注册的插件默认会强持有Engine或当前VC实例,自定义插件要在onDetachedFromEngine回调中清理所有强引用的对象、闭包、方法通道;第三方插件如果没有实现清理逻辑,可以用类别重写销毁方法,注册时用弱引用持有上下文 - 禁止使用
FlutterViewController无参构造,该构造会自动绑定全局Engine,无法独立销毁
Android端优化方案
- 不要使用
FlutterEngineCache缓存全局Engine实例,每次打开页面前用FlutterEngineGroup创建独立实例,相比直接new Engine,多实例场景下内存开销可以降低40%左右 - 严格按照以下顺序执行销毁逻辑,放在Activity的
onDestroy或Fragment的onDestroyView中:
@Override protected void onDestroy() { // 第一步:断开FlutterView和Engine的绑定 if (flutterView != null) { flutterView.detachFromFlutterEngine(); flutterView = null; } // 第二步:断开所有插件和Activity、Service等组件的绑定 if (engine != null) { engine.getActivityControlSurface().detachFromActivity(); engine.getPlugins().forEach(plugin -> { if (plugin instanceof ActivityAware) { ((ActivityAware) plugin).onDetachedFromActivity(); } if (plugin instanceof ServiceAware) { ((ServiceAware) plugin).onDetachedFromService(); } if (plugin instanceof BroadcastReceiverAware) { ((BroadcastReceiverAware) plugin).onDetachedFromBroadcastReceiver(); } }); // 第三步:销毁Engine,必须在所有绑定断开后调用 engine.destroy(); engine = null; } super.onDestroy(); }
- 不要在Application层预初始化Engine,轻量场景下预初始化只会导致内存长期驻留,单次创建Engine的开销完全在可接受范围内
- 如果使用
FlutterFragment,禁止设置retainInstance为true,会导致Fragment实例被系统持有无法释放,连带Engine也无法回收
通用排查技巧
- 每次退出Flutter页面后手动触发GC,用Xcode内存图工具或Android Studio Profiler查看是否有
FlutterEngine相关实例残留,直接排查引用持有链路,90%以上的泄漏都是插件或自定义方法通道持有原生上下文导致的 - Dart层的内存泄漏也会同步拉高原生内存占用,检查Dart代码中的全局变量、静态变量、订阅流是否在页面
dispose时主动释放,这些对象的内存归Engine管理,Engine不销毁就会一直驻留 - 如果Flutter模块功能非常简单、加载耗时可接受,每次打开都创建全新Engine即可,复用反而容易因为清理不彻底导致内存持续上涨
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

