google_maps_flutter地图组件内存过高及释放问题求助
内存问题排查思路
优先升级依赖版本
google_maps_flutter: ^2.2.1是较老的版本,后续官方修复了不少内存泄漏和性能问题,先升级到最新稳定版(如当前最新4.x系列),同时同步升级geolocator到对应兼容版本,再测试内存情况。检查组件dispose逻辑
确认State类中是否持有GoogleMapController的引用,dispose时需主动调用controller.dispose();若有通过geolocator监听位置的StreamSubscription,必须在dispose时调用subscription.cancel(),避免持续回调占用内存。用工具定位泄漏点
- iOS端用Instruments的Leaks模板:运行应用后操作地图(缩放、拖动),切换页面销毁地图组件,查看是否有未回收的
GMSMapView或Flutter侧地图相关对象。 - Flutter DevTools内存分析:分别在地图加载前、加载中、销毁后拍摄内存快照,对比对象数量,定位未被回收的核心对象(如
GoogleMapController、自定义Marker集合等)。
- iOS端用Instruments的Leaks模板:运行应用后操作地图(缩放、拖动),切换页面销毁地图组件,查看是否有未回收的
简化地图场景排查
先移除所有自定义内容(Marker、Polyline、交通图层、位置监听等),仅保留基础地图组件,观察内存是否仍持续增长:- 若仍增长,大概率是插件本身的版本问题,升级后再验证;
- 若内存稳定,再逐步添加自定义内容,定位到具体导致内存泄漏的元素(比如大量未清理的Marker)。
检查状态管理与页面存活
- 若使用Provider、Bloc等状态管理,确认地图相关数据(如控制器、Marker列表)未被全局状态持有,组件销毁时需清空对应状态数据。
- 检查页面是否启用
AutomaticKeepAliveClientMixin,若无需保持页面存活,需移除该混入,确保组件能正常dispose。
iOS原生配置优化
在Info.plist中添加GMSMapViewPreferredMetalEnabled并设置为YES,启用Metal渲染替代旧的OpenGL,降低iOS端地图的内存占用。
内容的提问来源于stack exchange,提问作者Jérôme
相关产品推荐
相关产品推荐

