java.lang.IllegalArgumentException: Unmanaged descriptor
This bug wasn't solved. Got it today. Just use a lot of markers in clustering - wait for them to start show on the map and then switch screens (navigate) before all of them became rendered.
java.lang.IllegalArgumentException: Unmanaged descriptor
at com.google.maps.api.android.lib6.common.m.b(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190800-0):10)
at com.google.maps.api.android.lib6.impl.w.c(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190800-0):18)
at com.google.maps.api.android.lib6.impl.cw.u(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190800-0):11)
at com.google.android.gms.maps.model.internal.p.bb(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190800-0):347)
at m.fi.onTransact(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190800-0):21)
at android.os.Binder.transact(Binder.java:1164)
at com.google.android.gms.internal.maps.zza.zzc(com.google.android.gms:play-services-maps@@18.1.0:2)
at com.google.android.gms.internal.maps.zzy.zzs(com.google.android.gms:play-services-maps@@18.1.0:3)
at com.google.android.gms.maps.model.Marker.setIcon(com.google.android.gms:play-services-maps@@18.1.0:2)
at com.google.maps.android.clustering.view.DefaultClusterRenderer.onClusterUpdated(DefaultClusterRenderer.java:937)
at com.google.maps.android.clustering.view.DefaultClusterRenderer$CreateMarkerTask.perform(DefaultClusterRenderer.java:1053)
at com.google.maps.android.clustering.view.DefaultClusterRenderer$CreateMarkerTask.access$2300(DefaultClusterRenderer.java:992)
at com.google.maps.android.clustering.view.DefaultClusterRenderer$MarkerModifier.performNextTask(DefaultClusterRenderer.java:707)
at com.google.maps.android.clustering.view.DefaultClusterRenderer$MarkerModifier.handleMessage(DefaultClusterRenderer.java:678)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Code:
val events by viewModel.eventsLocalDto.filtered.collectAsStateWithLifecycle()
val selectedEvent by viewModel.selectedEvent.collectAsStateWithLifecycle()
Clustering(
items = events,
onClusterItemClick = {
Timber.v("Marker clicked: ${it.name}")
viewModel.selectEvent(it)
true
},
)
if (selectedEvent is EventItem) (selectedEvent as EventItem).latLng.let {
val selectedMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)
Marker(state = MarkerState(it), zIndex = 0.5f, icon = selectedMarker)
}
selectedEvent wasn't even used here. So, all markers had default view and their count was: 32632.
I have the same issue and it's easy to reproduce. I have 200+ markers. By quickly tapping on the 200+ circle, map zooms in low res. Before it renders high res map and draw all markers, I navigate back to the previous screen. Within a second app crashes with the mentioned error.
Just tested with the latest release 3.0.0 and the issue is still there.
I found the cause of the crash in my case:
val cameraPositionState = rememberCameraPositionState()
GoogleMap(
modifier = Modifier.fillMaxSize(),
cameraPositionState = cameraPositionState,
) {
Clustering(
items = items,
clusterItemContent = { mapDataClass ->
ClusterItemContent(
mapDataClass = mapDataClass,
isCameraMoving = cameraPositionState.isMoving,
)
},
)
}
Looks like cameraPositionState changes when the screen is already leaving composition. Without using cameraPositionState for clusterItemContent, the app won't crash.
I even found a workaround:
var isScreenClosing by remember { mutableStateOf(false) }
I set this boolean to true before navigating. Then I updated clusterItemContent:
clusterItemContent = { mapDataClass ->
if (!isScreenClosing) {
ClusterItemContent(
mapDataClass = mapDataClass,
isCameraMoving = cameraPositionState.isMoving,
)
}
},
With this I wasn't able to replicate the crash anymore.
Anyway, I'm not 100% confident with this workaround. It doesn't cover scenarios when navigation changes outside of the screen with map.
Proper fix should be that this library shouldn't try to update marker icons while it's being released.
What is isScreenClosing? Some flag toggled in Disposable?
@Psijic it's just a var I created that I'm setting to true before navigating out of the screen. That way I can prevent recomposition of clusterItemContent. It's not perfect, because when navigation is changed outside of the screen, then the screen has no idea and it can still crash. It's safer to prevent using cameraPositionState inside clusterItemContent...
I'm going to check the source code of DefaultClusterRenderer looking for a better solution.
Got this crash too.
I'm not using Cluster but simply MarkerComposable
Hi folks,
The following PR might fix this issue. The Clustering was not being disposed, so probably with a large number of markers the process to deal with items in a cluster could be somehow taking longer, and by the time an item is going to be updated the map does not longer exist. I will let you know when it is merged and maybe you folks can take a look.
https://github.com/googlemaps/android-maps-compose/pull/458
Same problem, appeared when upgrading from 2.14.0 to 4.1.1. I only use markers without clustering.
- com.google.maps.android:maps-compose: 4.1.1
- com.google.android.gms:play-services-maps: 18.2.0
- com.google.android.gms:play-services-base: 18.2.0
Fatal Exception: java.lang.IllegalArgumentException
Unmanaged descriptor
com.google.maps.api.android.lib6.common.p.a (:com.google.android.gms.policy_maps_core_dynamite@[email protected]:10)
com.google.maps.api.android.lib6.impl.ab.a (:com.google.android.gms.policy_maps_core_dynamite@[email protected]:17)
com.google.maps.api.android.lib6.impl.el.V (:com.google.android.gms.policy_maps_core_dynamite@[email protected]:6)
com.google.maps.api.android.lib6.phoenix.bj.v (:com.google.android.gms.policy_maps_core_dynamite@[email protected]:7)
com.google.maps.api.android.lib6.phoenix.bj.h (:com.google.android.gms.policy_maps_core_dynamite@[email protected]:153)
com.google.maps.api.android.lib6.impl.es.run (:com.google.android.gms.policy_maps_core_dynamite@[email protected]:54)
android.os.Handler.handleCallback (Handler.java:971)
android.os.Handler.dispatchMessage (Handler.java:107)
android.os.Looper.loopOnce (Looper.java:206)
android.os.Looper.loop (Looper.java:296)
android.app.ActivityThread.main (ActivityThread.java:9159)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:591)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1018)
@kikoso, hi! Has the problem been fixed in 4.3.0?
Hi @0xffrom .
The latest version (4.3.0) includes a fix that disposes of clusters, which was not happening in previous versions.
If you aren't using Clustering, this is likely another issue. Could you provide another code snippet with the relevant code block? (for instance, the region where you are adding the Marker to the Map).
@kikoso I've retested with version 4.3.0 and I wasn't able to reproduce the crash. I believe the clustering issue is now gone, thank you!
Thanks for letting us know, @milosfec !
Closing this as fixed by #458 in v4.3.0. Please re-open if it recurs in v4.3.0 or later.
Hello, I am facing this problem on version v4.3.0, when the number of markers in the cluster exceeds 100 elements
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.fbc.h(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:41)
at m.fbc.<init>(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:140)
at com.google.maps.api.android.lib6.impl.hz.<init>(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:7)
at com.google.android.gms.maps.internal.CreatorImpl.c(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:1157)
at com.google.android.gms.maps.internal.CreatorImpl.logInitialization(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:16)
at com.google.android.gms.maps.internal.i.bp(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:75)
at m.bcb.onTransact(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:21)
at android.os.Binder.transact(Binder.java:1188)
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)
Hi @wangela ,
Firebase Analytics indicates that this issue is still happening in the newest release of our app, which uses version 4.3.0.
Fatal Exception: java.lang.IllegalArgumentException: Unmanaged descriptor
at com.google.maps.api.android.lib6.common.m.b(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):10)
at com.google.maps.api.android.lib6.impl.w.c(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):18)
at com.google.maps.api.android.lib6.impl.cw.u(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):11)
at com.google.android.gms.maps.model.internal.r.bb(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):347)
at m.ee.onTransact(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):21)
at android.os.Binder.transact(Binder.java:1173)
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.internal.maps.zzab.zzt(com.google.android.gms:play-services-maps@@18.2.0:3)
at com.google.android.gms.maps.model.Marker.setIcon(com.google.android.gms:play-services-maps@@18.2.0:2)
at com.google.maps.android.clustering.view.DefaultClusterRenderer.onClusterUpdated(DefaultClusterRenderer.java:972)
at com.google.maps.android.clustering.view.DefaultClusterRenderer$CreateMarkerTask.perform(DefaultClusterRenderer.java:1091)
at com.google.maps.android.clustering.view.DefaultClusterRenderer$CreateMarkerTask.access$1900(DefaultClusterRenderer.java:1027)
at com.google.maps.android.clustering.view.DefaultClusterRenderer$MarkerModifier.performNextTask(DefaultClusterRenderer.java:738)
at com.google.maps.android.clustering.view.DefaultClusterRenderer$MarkerModifier.handleMessage(DefaultClusterRenderer.java:710)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loopOnce(Looper.java:238)
at android.os.Looper.loop(Looper.java:357)
at android.app.ActivityThread.main(ActivityThread.java:8194)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:957)
Hi everyone, I am also facing the issue with the 4.3.0 I never managed to reproduce it during development, however, our users experience it.
Fatal Exception: 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.fbc.h(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:41)
at m.fbc.e(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:1)
at com.google.maps.api.android.lib6.impl.p.b(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:27)
at com.google.maps.api.android.lib6.impl.cm.aY(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:3)
at com.google.maps.api.android.lib6.impl.cm.D(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:32)
at com.google.maps.api.android.lib6.impl.eh.l(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:3)
at com.google.android.gms.maps.internal.s.bp(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:14)
at m.bcb.onTransact(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:21)
at android.os.Binder.transact(Binder.java:1188)
at com.google.android.gms.internal.maps.zza.zzc(zza.java:2)
at com.google.android.gms.maps.internal.zzl.onStart(zzl.java:2)
at com.google.android.gms.maps.zzah.onStart(com.google.android.gms:play-services-maps@@18.2.0:1)
at com.google.android.gms.dynamic.zaf.zab(com.google.android.gms:play-services-base@@18.3.0:1)
at com.google.android.gms.dynamic.DeferredLifecycleHelper.zaf(com.google.android.gms:play-services-base@@18.3.0:1)
at com.google.android.gms.dynamic.DeferredLifecycleHelper.onStart(DeferredLifecycleHelper.java:1)
at com.google.android.gms.maps.MapView.onStart(MapView.java:1)
at com.google.maps.android.compose.GoogleMapKt.lifecycleObserver$lambda$11(GoogleMap.kt:211)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.kt:322)
at androidx.lifecycle.LifecycleRegistry.addObserver(LifecycleRegistry.kt:199)
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)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcomposeInto(SubcomposeLayout.kt:721)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcompose(SubcomposeLayout.kt:694)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcompose(SubcomposeLayout.kt:685)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcompose(SubcomposeLayout.kt:669)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$Scope.subcompose(SubcomposeLayout.kt:1014)
at androidx.compose.material3.BottomSheetScaffoldKt$BottomSheetScaffoldLayout$1$1.invoke-0kLqBqw(BottomSheetScaffold.kt:347)
at androidx.compose.material3.BottomSheetScaffoldKt$BottomSheetScaffoldLayout$1$1.invoke(BottomSheetScaffold.kt:329)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$createMeasurePolicy$1.measure-3p2s80s(SubcomposeLayout.kt:866)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:126)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1499)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1495)
at androidx.compose.runtime.snapshots.Snapshot.enter(Snapshot.java:131)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:476)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:467)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:230)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:113)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:1495)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$getNextChildLookaheadPlaceOrder$p(LayoutNodeLayoutDelegate.kt)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:560)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(LayoutNodeLayoutDelegate.kt:539)
at androidx.compose.foundation.layout.BoxKt$boxMeasurePolicy$1.measure-3p2s80s(Box.kt:114)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:126)
at androidx.compose.foundation.layout.FillNode.measure-3p2s80s(Size.kt:698)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1499)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1495)
at androidx.compose.runtime.snapshots.Snapshot.enter(Snapshot.java:131)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:476)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:467)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:230)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:113)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:1495)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$getNextChildLookaheadPlaceOrder$p(LayoutNodeLayoutDelegate.kt)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:560)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(LayoutNodeLayoutDelegate.kt:539)
at androidx.compose.animation.AnimatedEnterExitMeasurePolicy.measure-3p2s80s(AnimatedVisibility.kt:795)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:126)
at androidx.compose.ui.graphics.BlockGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:578)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.animation.AnimatedContentKt$AnimatedContent$6$1$1.invoke-3p2s80s(AnimatedContent.kt:763)
at androidx.compose.animation.AnimatedContentKt$AnimatedContent$6$1$1.invoke(AnimatedContent.kt:762)
at androidx.compose.ui.layout.LayoutModifierImpl.measure-3p2s80s(LayoutModifier.kt:291)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1499)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1495)
at androidx.compose.runtime.snapshots.Snapshot.enter(Snapshot.java:131)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:476)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:467)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:230)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:113)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:1495)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$getNextChildLookaheadPlaceOrder$p(LayoutNodeLayoutDelegate.kt)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:560)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(LayoutNodeLayoutDelegate.kt:539)
at androidx.compose.animation.AnimatedContentMeasurePolicy.measure-3p2s80s(AnimatedContent.kt:814)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:126)
at androidx.compose.animation.AnimatedContentTransitionScopeImpl$SizeModifier.measure-3p2s80s(AnimatedContent.kt:598)
at androidx.compose.ui.node.BackwardsCompatNode.measure-3p2s80s(BackwardsCompatNode.kt:311)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:646)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1499)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1495)
at androidx.compose.runtime.snapshots.Snapshot.enter(Snapshot.java:131)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:476)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:467)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:230)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:113)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:1495)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$getNextChildLookaheadPlaceOrder$p(LayoutNodeLayoutDelegate.kt)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:560)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release(LayoutNode.kt:1140)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release$default(LayoutNode.kt:1131)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-sdFAvZA(MeasureAndLayoutDelegate.kt:323)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:458)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.access$getRoot$p(MeasureAndLayoutDelegate.kt)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.access$remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:344)
at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout(AndroidComposeView.android.kt:879)
at androidx.compose.ui.node.Owner.measureAndLayout$default(Owner.kt:223)
at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:1127)
at android.view.View.draw(View.java:23469)
at android.view.View.updateDisplayListIfDirty(View.java:22297)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4595)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4568)
at android.view.View.updateDisplayListIfDirty(View.java:22248)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4595)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4568)
at android.view.View.updateDisplayListIfDirty(View.java:22248)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4595)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4568)
at android.view.View.updateDisplayListIfDirty(View.java:22248)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4595)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4568)
at android.view.View.updateDisplayListIfDirty(View.java:22248)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:682)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:688)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:790)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:4898)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4593)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3759)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2453)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9468)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1405)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1413)
at android.view.Choreographer.doCallbacks(Choreographer.java:1040)
at android.view.Choreographer.doFrame(Choreographer.java:930)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1388)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:240)
at android.os.Looper.loop(Looper.java:351)
at android.app.ActivityThread.main(ActivityThread.java:8423)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
we need to reopen issue , if it still exists in current versions
Any update on this? Can this ticket be reopened please? It blocks us from using the Compose map in our app.
I'm also having the issue with a large number of markers on the screen.
I am also facing the same issue
Reopening this issue to further investigate it.
Do you folks have any code snippet we can use to reproduce it?
We experienced this issue in the past already, then some GoogleMaps update fixed it for us but since 10.01.2025 we get this crash from time to time again.
The stack trace is almost identical to the initial one, just the version numbers are different:
java.lang.IllegalArgumentException: Unmanaged descriptor
at com.google.maps.api.android.lib6.common.m.b(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (170300-0):10)
at com.google.maps.api.android.lib6.impl.w.c(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (170300-0):17)
at com.google.maps.api.android.lib6.impl.cv.u(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (170300-0):11)
at com.google.android.gms.maps.model.internal.r.bd(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (170300-0):344)
at m.do.onTransact(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (170300-0):21)
at android.os.Binder.transact(Binder.java:1053)
at com.google.android.gms.internal.maps.zza.zzc(com.google.android.gms:play-services-maps@@19.0.0:0)
at com.google.android.gms.internal.maps.zza.zzc(com.google.android.gms:play-services-maps@@19.0.0:2)
at com.google.android.gms.internal.maps.zzaf.zzt(com.google.android.gms:play-services-maps@@19.0.0:0)
at com.google.android.gms.internal.maps.zzaf.zzt(com.google.android.gms:play-services-maps@@19.0.0:3)
at com.google.android.gms.maps.model.Marker.setIcon(com.google.android.gms:play-services-maps@@19.0.0:0)
at com.google.android.gms.maps.model.Marker.setIcon(com.google.android.gms:play-services-maps@@19.0.0:2)
at com.google.maps.android.clustering.view.DefaultClusterRenderer$CreateMarkerTask.perform(DefaultClusterRenderer.java:0)
at com.google.maps.android.clustering.view.DefaultClusterRenderer.onClusterUpdated
at com.google.maps.android.clustering.view.DefaultClusterRenderer$CreateMarkerTask.perform(DefaultClusterRenderer.java:1091)
at com.google.maps.android.clustering.view.DefaultClusterRenderer$MarkerModifier.performNextTask(DefaultClusterRenderer.java:0)
at com.google.maps.android.clustering.view.DefaultClusterRenderer$MarkerModifier.performNextTask(DefaultClusterRenderer.java:738)
at com.google.maps.android.clustering.view.DefaultClusterRenderer$MarkerModifier.handleMessage(DefaultClusterRenderer.java:0)
at com.google.maps.android.clustering.view.DefaultClusterRenderer$MarkerModifier.handleMessage(DefaultClusterRenderer.java:710)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:257)
at android.app.ActivityThread.main(ActivityThread.java:8333)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:603)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
I am using the GoogleMap composable inside a Compose Dialog combined with the Clustering composable. I also noticed that the crash happens right away when the map is initialized. But unfortunately, I could not yet find a reproducible example that always triggers it.
A workaround I currently use is to copy ComposeUiClusterRenderer and rememberClusterRenderer from the library to my project (using @SuppressLint("RestrictedApi")) and override onClusterUpdated in ComposeUiClusterRenderer to include an additional try-catch so that the app at least does not crash. It would be way easier if ComposeUiClusterRenderer was public/open so that we could just override the needed method instead copying the whole class. Would that change be possible?