2023年8月后仅Android 7设备出现Google Map崩溃问题
问题描述
2023年8月10日之后未修改任何代码,但Firebase Crashlytics报告显示所有应用生产版本突然出现以下崩溃,且100%发生在Android 7设备上:
Fatal Exception: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6937) at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1118) at android.view.ViewGroup.invalidateChild(ViewGroup.java:5205) at android.view.View.invalidateInternal(View.java:13686) at android.view.View.invalidate(View.java:13650) at android.view.View.invalidate(View.java:13634) at com.google.maps.api.android.lib6.lite.s.l(:com.google.android.gms.policy_maps_core_dynamite@231710108@231710104031.542928491.542928491) at com.google.maps.api.android.lib6.lite.n.d(:com.google.android.gms.policy_maps_core_dynamite@231710108@231710104031.542928491.542928491:2) at com.google.maps.api.android.lib6.impl.ei.run(:com.google.android.gms.policy_maps_core_dynamite@231710108@231710104031.542928491.542928491:3) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at java.lang.Thread.run(Thread.java:761)
怀疑是Google Maps API自动更新导致的问题,寻求其他开发者的遇到情况及解决方案。
解决方案
1. 锁定Google Maps依赖版本
这是最直接的临时修复方案:将com.google.android.gms:play-services-maps依赖锁定到23.0.0或更早的稳定版本(崩溃日志中的版本为23.1.7,该版本存在线程问题)。
示例Gradle配置:
dependencies { implementation 'com.google.android.gms:play-services-maps:23.0.0' }
2. 升级至修复后的版本
Google在后续版本中修复了该线程异常问题,直接升级到23.2.0及以上版本的play-services-maps即可解决崩溃:
dependencies { implementation 'com.google.android.gms:play-services-maps:23.2.0' }
3. 临时应急Workaround(若无法立刻更新依赖)
如果暂时无法调整依赖版本,可在代码中确保所有与Google Maps相关的视图操作都在UI线程执行,比如使用runOnUiThread包裹可能触发地图视图更新的逻辑:
runOnUiThread(() -> { // 地图相关的初始化/更新操作 mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 12)); });
补充说明
该问题在2023年8月中旬集中爆发,是Google Maps Lite SDK的动态更新组件(policy_maps_core_dynamite)内部出现的线程错误——SDK在后台线程中尝试更新UI视图,违反了Android的线程规则。当时大量开发者反馈了相同问题,Google后续通过更新SDK版本完成了修复。
内容的提问来源于stack exchange,提问作者Allen
相关产品推荐
相关产品推荐

