Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash when changing styles quickly on Android #252

Open
michalgwo opened this issue Jan 16, 2025 · 0 comments · May be fixed by #265 or #269
Open

Crash when changing styles quickly on Android #252

michalgwo opened this issue Jan 16, 2025 · 0 comments · May be fixed by #265 or #269
Labels
android Affects Android in particular, or relates to Android specific code bug Something isn't working
Milestone

Comments

@michalgwo
Copy link
Contributor

When changing styles quickly, my Android app crashes with this error:

          Fatal Exception: java.lang.IllegalStateException: Calling getSources when a newer style is loading/has loaded.
       at org.maplibre.android.maps.Style.validateState(Style.java:776)
       at org.maplibre.android.maps.Style.getSources(Style.java:107)
       at dev.sargunv.maplibrecompose.core.AndroidStyle.getSources(AndroidStyle.kt:27)
       at dev.sargunv.maplibrecompose.compose.engine.SourceManager.<init>(SourceManager.kt:7)
       at dev.sargunv.maplibrecompose.compose.engine.StyleNode.<init>(StyleNode.kt:8)
       at dev.sargunv.maplibrecompose.compose.engine.RememberStyleCompositionKt$rememberStyleComposition$1$1.invokeSuspend(rememberStyleComposition.kt:28)
       at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
       at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:101)
       at androidx.compose.ui.platform.AndroidUiDispatcher.performTrampolineDispatch(AndroidUiDispatcher.android.kt:81)
       at androidx.compose.ui.platform.AndroidUiDispatcher.access$performTrampolineDispatch(AndroidUiDispatcher.android.kt:41)
       at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.run(AndroidUiDispatcher.android.kt:57)
       at android.os.Handler.handleCallback(Handler.java:883)
       at android.os.Handler.dispatchMessage(Handler.java:100)
       at android.os.Looper.loop(Looper.java:224)
       at android.app.ActivityThread.main(ActivityThread.java:7590)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

I managed to reproduce it on Style Switcher Demo, by changing styles very quickly, and got a little different error:

java.lang.IllegalStateException: Calling getLayers when a newer style is loading/has loaded.
	at org.maplibre.android.maps.Style.validateState(Style.java:776)
	at org.maplibre.android.maps.Style.getLayers(Style.java:268)
	at dev.sargunv.maplibrecompose.core.AndroidStyle.getLayers(AndroidStyle.kt:43)
	at dev.sargunv.maplibrecompose.compose.MaplibreMapKt$MaplibreMap$callbacks$1$1.layerNodesInOrder(MaplibreMap.kt:139)
	at dev.sargunv.maplibrecompose.compose.MaplibreMapKt$MaplibreMap$callbacks$1$1.onClick-GrvxvIE(MaplibreMap.kt:146)
	at dev.sargunv.maplibrecompose.core.AndroidMap._init_$lambda$7(AndroidMap.kt:169)
	at dev.sargunv.maplibrecompose.core.AndroidMap.$r8$lambda$3_KOftxaIQ7_JozXXAVYsr09nZY(Unknown Source:0)
	at dev.sargunv.maplibrecompose.core.AndroidMap$$ExternalSyntheticLambda4.onMapClick(D8$$SyntheticClass:0)
	at org.maplibre.android.maps.MapGestureDetector.notifyOnMapClickListeners(MapGestureDetector.java:1006)
	at org.maplibre.android.maps.MapGestureDetector$StandardGestureListener.onSingleTapConfirmed(MapGestureDetector.java:362)
	at org.maplibre.android.gestures.StandardGestureDetector$1.onSingleTapConfirmed(StandardGestureDetector.java:83)
	at android.view.GestureDetector$GestureHandler.handleMessage(GestureDetector.java:323)
	at android.os.Handler.dispatchMessage(Handler.java:107)
	at android.os.Looper.loop(Looper.java:224)
	at android.app.ActivityThread.main(ActivityThread.java:7590)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

I don't know if the crash also occurs on other platforms, but on Android it can be fixed simply by checking isFullyLoaded before every interaction with the style.

@sargunv sargunv added bug Something isn't working android Affects Android in particular, or relates to Android specific code labels Jan 16, 2025
@sargunv sargunv added this to the v0.7.0 milestone Jan 17, 2025
@michalgwo michalgwo linked a pull request Jan 30, 2025 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
android Affects Android in particular, or relates to Android specific code bug Something isn't working
Projects
None yet
2 participants