Android targetSdk升至29+后谷歌地图定位应用OOM崩溃Tombstone解析求助
根因定位
你提供的tombstone日志显示崩溃触发于ART虚拟机的JIT代码缓存分配环节,属于Google Maps SDK在Android 10/11系统、targetSdk≥29版本下的已知内存泄漏问题,官方公开修复未覆盖全场景,持续定位数小时后就会因为JIT缓存占满触发OOM SIGABRT。
可行解决方案
- 业务允许的前提下,暂时将targetSdkVersion回退到28,可直接规避该类崩溃
- 升级Google Maps SDK到3.1.0及以上稳定版,该版本补充了位置回调相关的内存泄漏修复逻辑
- 禁用Maps SDK自带的MyLocation定位层,自行实现系统位置API调用,仅将坐标传给地图渲染,避免SDK内部频繁触发重复代码编译
- 限制地图资源占用:调用
GoogleMap.setMapMemoryBudget()设置地图内存上限,前台定位频率不高于1次/秒,应用退到后台时主动停止位置更新、清空地图瓦片缓存 - 如性能影响可接受,可在Application初始化阶段添加配置禁用JIT编译,彻底规避JIT缓存溢出问题:
@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); try { System.setProperty("jit.enable", "false"); } catch (Exception ignore) { // 部分设备不允许修改该配置,直接忽略即可 } }
排查验证方向
- 用Android Studio Profiler监控应用运行3小时以上的native内存曲线,若内存持续线性上涨无回落,即可确认是泄漏问题
- 单独测试关闭地图时的长稳运行表现,若不再崩溃即可100%定位到Maps SDK的问题
- 统计不同系统版本的崩溃率,若仅Android 10/11出现该问题,即可对齐已知根因,无需额外做无关排查
内容的提问来源于stack exchange,提问作者quiglyd
相关产品推荐
相关产品推荐

