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
相关产品推荐
相关产品推荐

