You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 14+Jetpack Compose环境下Google Map启动崩溃问题

Google Map启动崩溃问题(SDK 34迁移后)

环境信息

  • 目标SDK:34
  • Jetpack Compose:1.5.4
  • Material3:1.1.2
  • Google Services版本:com.google.gms:google-services:4.4.0

崩溃日志

android.net.ConnectivityManager$TooManyRequestsException
                                        at android.net.ConnectivityManager.convertServiceException(ConnectivityManager.java:4165)
                                        at android.net.ConnectivityManager.sendRequestForNetwork(ConnectivityManager.java:4357)
                                        at android.net.ConnectivityManager.sendRequestForNetwork(ConnectivityManager.java:4364)
                                        at android.net.ConnectivityManager.registerNetworkCallback(ConnectivityManager.java:4746)
                                        at android.net.ConnectivityManager.registerNetworkCallback(ConnectivityManager.java:4716)
                                        at m.ewx.h(:com.google.android.gms.policy_maps_core_dynamite@233610105@233610102065.573949206.573949206:41)
                                        at m.ewx.<init>(:com.google.android.gms.policy_maps_core_dynamite@233610105@233610102065.573949206.573949206:140)
                                        at com.google.maps.api.android.lib6.impl.hz.<init>(:com.google.android.gms.policy_maps_core_dynamite@233610105@233610102065.573949206.573949206:7)
                                        at com.google.android.gms.maps.internal.CreatorImpl.c(:com.google.android.gms.policy_maps_core_dynamite@233610105@233610102065.573949206.573949206:1094)
                                        at com.google.android.gms.maps.internal.CreatorImpl.logInitialization(:com.google.android.gms.policy_maps_core_dynamite@233610105@233610102065.573949206.573949206:16)
                                        at com.google.android.gms.maps.internal.i.bp(:com.google.android.gms.policy_maps_core_dynamite@233610105@233610102065.573949206.573949206:75)
                                        at m.bbf.onTransact(:com.google.android.gms.policy_maps_core_dynamite@233610105@233610102065.573949206.573949206:21)
                                        at android.os.Binder.transact(Binder.java:1183)
                                        at com.google.android.gms.internal.maps.zza.zzc(com.google.android.gms:play-services-maps@@18.2.0:2)
                                        at com.google.android.gms.maps.internal.zze.zzl(com.google.android.gms:play-services-maps@@18.2.0:4)
                                        at com.google.android.gms.maps.MapsInitializer.initialize(com.google.android.gms:play-services-maps@@18.2.0:12)
                                        at com.google.android.gms.maps.MapsInitializer.initialize(com.google.android.gms:play-services-maps@@18.2.0:1)
                                        at com.google.android.gms.maps.zzai.zzb(com.google.android.gms:play-services-maps@@18.2.0:2)
                                        at com.google.android.gms.maps.zzai.createDelegate(com.google.android.gms:play-services-maps@@18.2.0:1)
                                        at com.google.android.gms.dynamic.DeferredLifecycleHelper.zaf(com.google.android.gms:play-services-base@@18.1.0:6)
                                        at com.google.android.gms.dynamic.DeferredLifecycleHelper.onCreate(com.google.android.gms:play-services-base@@18.1.0:1)
                                        at com.google.android.gms.maps.MapView.onCreate(com.google.android.gms:play-services-maps@@18.2.0:4)
                                        at com.google.maps.android.compose.GoogleMapKt.lifecycleObserver$lambda$11(GoogleMap.kt:207)
                                        at com.google.maps.android.compose.GoogleMapKt.$r8$lambda$Vm6abttjyrD0BNPAw0a-nOgtk1E(Unknown Source:0)
                                        at com.google.maps.android.compose.GoogleMapKt$$ExternalSyntheticLambda0.onStateChanged(Unknown Source:4)
                                        at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.kt:314)
                                        at androidx.lifecycle.LifecycleRegistry.addObserver(LifecycleRegistry.kt:192)
                                        at com.google.maps.android.compose.GoogleMapKt$MapLifecycle$1.invoke(GoogleMap.kt:182)
                                        at com.google.maps.android.compose.GoogleMapKt$MapLifecycle$1.invoke(GoogleMap.kt:178)
                                        at androidx.compose.runtime.DisposableEffectImpl.onRemembered(Effects.kt:82)
                                        at androidx.compose.runtime.CompositionImpl$RememberEventDispatcher.dispatchRememberObservers(Composition.kt:1137)
                                        at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:828)
                                        at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:849)
                                        at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:1041)
                                        at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release(Composer.kt:4007)
                                        at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release(Composer.kt:4007)
                                        at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:520)

问题分析

崩溃源于Google Maps核心组件初始化时,向ConnectivityManager注册网络回调触发了TooManyRequestsException——这是系统对网络回调注册次数的限制被触发导致的。常见诱因包括:

  • Maps组件被重复初始化
  • 项目其他代码重复注册网络回调但未及时注销
  • 旧版本Maps依赖与SDK 34存在兼容性冲突

解决方案

  • 升级Maps依赖版本:当前使用的play-services-maps:18.2.0存在SDK 34兼容性问题,建议升级到最新稳定版(如18.3.0或更高),同时确保play-services-base等关联依赖版本匹配。
  • 避免重复初始化:检查Compose代码中GoogleMap组件的使用逻辑,通过remember或LaunchedEffect控制初始化时机,防止因Compose重组导致重复触发初始化。
  • 清理网络回调注册:如果项目自身有注册ConnectivityManager回调的代码,确保每次注册后都在生命周期销毁时注销,避免回调堆积超出系统限制。
  • 补全权限声明:确认AndroidManifest.xml中已添加必要权限,SDK 34对网络权限要求更严格:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  • 捕获初始化异常:临时添加异常捕获逻辑,避免崩溃扩散:
try {
    MapsInitializer.initialize(applicationContext)
} catch (e: ConnectivityManager.TooManyRequestsException) {
    // 记录日志或执行降级逻辑
} catch (e: Exception) {
    // 处理其他初始化异常
}

内容的提问来源于stack exchange,提问作者Jeevan Rupacha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 11:08:11