android / health-samples

Apache License 2.0
259 stars 147 forks source link

ExerciseSampleCompose app is crashing when it launches #260

Closed huewu closed 4 months ago

huewu commented 4 months ago

When App is crashing with below exception on Wear5 emulator and Pixel Watches as well.

FATAL EXCEPTION: main (Ask Gemini) Process: com.example.exercisecompose, PID: 31218 java.lang.IllegalStateException: CompositionLocal LocalLifecycleOwner not present at androidx.lifecycle.compose.LocalLifecycleOwnerKt$LocalLifecycleOwner$1.invoke(LocalLifecycleOwner.kt:26) at androidx.lifecycle.compose.LocalLifecycleOwnerKt$LocalLifecycleOwner$1.invoke(LocalLifecycleOwner.kt:25) at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) at androidx.compose.runtime.LazyValueHolder.getCurrent(ValueHolders.kt:29) at androidx.compose.runtime.LazyValueHolder.getValue(ValueHolders.kt:31) at androidx.compose.runtime.CompositionLocalMapKt.read(CompositionLocalMap.kt:90) at androidx.compose.runtime.ComposerImpl.consume(Composer.kt:2135) at androidx.lifecycle.compose.FlowExtKt.collectAsStateWithLifecycle(FlowExt.kt:182) at com.example.exercisesamplecompose.presentation.exercise.ExerciseScreenKt.ExerciseRoute(ExerciseScreen.kt:71) at com.example.exercisesamplecompose.presentation.ExerciseSampleAppKt$ExerciseSampleApp$1$2$1$2.invoke(ExerciseSampleApp.kt:91) at com.example.exercisesamplecompose.presentation.ExerciseSampleAppKt$ExerciseSampleApp$1$2$1$2.invoke(ExerciseSampleApp.kt:90) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:118) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) at androidx.wear.compose.navigation.SwipeDismissableNavHostKt$BoxedStackEntryContent$2$1.invoke(SwipeDismissableNavHost.kt:422) at androidx.wear.compose.navigation.SwipeDismissableNavHostKt$BoxedStackEntryContent$2$1.invoke(SwipeDismissableNavHost.kt:421) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:248) at androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:84) at androidx.navigation.compose.NavBackStackEntryProviderKt.SaveableStateProvider(NavBackStackEntryProvider.kt:65) at androidx.navigation.compose.NavBackStackEntryProviderKt.access$SaveableStateProvider(NavBackStackEntryProvider.kt:1) at androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:52) at androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:51) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228) at androidx.navigation.compose.NavBackStackEntryProviderKt.LocalOwnersProvider(NavBackStackEntryProvider.kt:47) at androidx.wear.compose.navigation.SwipeDismissableNavHostKt.BoxedStackEntryContent(SwipeDismissableNavHost.kt:421) at androidx.wear.compose.navigation.SwipeDismissableNavHostKt.access$BoxedStackEntryContent(SwipeDismissableNavHost.kt:1) at androidx.wear.compose.navigation.SwipeDismissableNavHostKt$SwipeDismissableNavHost$6.invoke(SwipeDismissableNavHost.kt:228) at androidx.wear.compose.navigation.SwipeDismissableNavHostKt$SwipeDismissableNavHost$6.invoke(SwipeDismissableNavHost.kt:227) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:139) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) at androidx.wear.compose.foundation.BasicSwipeToDismissBoxKt$BasicSwipeToDismissBox$2$3$2.invoke(BasicSwipeToDismissBox.kt:207) at androidx.wear.compose.foundation.BasicSwipeToDismissBoxKt$BasicSwipeToDismissBox$2$3$2.invoke(BasicSwipeToDismissBox.kt:168) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109) 2024-05-22 17:00:26.106 31218-31218 AndroidRuntime com.example.exercisecompose E at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) (Ask Gemini) at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:192) at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2556) at androidx.compose.runtime.ComposerImpl.skipToGroupEnd(Composer.kt:2850) at androidx.wear.compose.foundation.HierarchicalFocusCoordinatorKt.HierarchicalFocusCoordinator(HierarchicalFocusCoordinator.kt:68) at androidx.wear.compose.foundation.BasicSwipeToDismissBoxKt.BasicSwipeToDismissBox(BasicSwipeToDismissBox.kt:168) at androidx.wear.compose.navigation.SwipeDismissableNavHostKt.SwipeDismissableNavHost(SwipeDismissableNavHost.kt:221) at androidx.wear.compose.navigation.SwipeDismissableNavHostKt.SwipeDismissableNavHost(SwipeDismissableNavHost.kt:93) at com.example.exercisesamplecompose.presentation.ExerciseSampleAppKt$ExerciseSampleApp$1$2.invoke(ExerciseSampleApp.kt:64) at com.example.exercisesamplecompose.presentation.ExerciseSampleAppKt$ExerciseSampleApp$1$2.invoke(ExerciseSampleApp.kt:63) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:118) at androidx.compose.runtime.internal.ComposableLambdaImpl$invoke$1.invoke(ComposableLambda.jvm.kt:130) at androidx.compose.runtime.internal.ComposableLambdaImpl$invoke$1.invoke(ComposableLambda.jvm.kt:129) at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:192) at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2556) at androidx.compose.runtime.ComposerImpl.skipToGroupEnd(Composer.kt:2850) at com.google.android.horologist.compose.layout.AppScaffoldKt.AppScaffold(AppScaffold.kt:58) at com.example.exercisesamplecompose.presentation.ExerciseSampleAppKt$ExerciseSampleApp$1.invoke(ExerciseSampleApp.kt:57) at com.example.exercisesamplecompose.presentation.ExerciseSampleAppKt$ExerciseSampleApp$1.invoke(ExerciseSampleApp.kt:55) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:118) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) at com.google.android.horologist.compose.ambient.AmbientAwareKt.AmbientAware(AmbientAware.kt:100) at com.example.exercisesamplecompose.presentation.ExerciseSampleAppKt.ExerciseSampleApp(ExerciseSampleApp.kt:53) at com.example.exercisesamplecompose.presentation.ExerciseSampleAppKt$ExerciseSampleApp$2.invoke(Unknown Source:12) at com.example.exercisesamplecompose.presentation.ExerciseSampleAppKt$ExerciseSampleApp$2.invoke(Unknown Source:10) at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:192) at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2556) at androidx.compose.runtime.ComposerImpl.skipCurrentGroup(Composer.kt:2827) at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:3314) at androidx.compose.runtime.ComposerImpl.recompose$runtime_release(Composer.kt:3265) at androidx.compose.runtime.CompositionImpl.recompose(Composition.kt:940) at androidx.compose.runtime.Recomposer.performRecompose(Recomposer.kt:1155) at androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:127) at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:583) at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:551) at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:41) at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109) at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41) at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1229) 2024-05-22 17:00:26.108 31218-31218 AndroidRuntime com.example.exercisecompose E at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1239) (Ask Gemini) at android.view.Choreographer.doCallbacks(Choreographer.java:899) at android.view.Choreographer.doFrame(Choreographer.java:827) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1214) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7894) 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) Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.runtime.PausableMonotonicFrameClock@91f571f, androidx.compose.ui.platform.MotionDurationScaleImpl@fddba6c, StandaloneCoroutine{Cancelling}@bbd7835, AndroidUiDispatcher@84a84ca]

huewu commented 4 months ago

it seems it's a regression issue in commit #258. (update androidx-lifecycle dependency from 2.70 to 2.8.0)

huewu commented 4 months ago

compose version 1.7.0+ should be used with androidx-lifecycle version 2.8.0 https://b.corp.google.com/issues/336842920

yschimke commented 4 months ago

https://github.com/android/health-samples/pull/261

It's a beta, other option is to revert to lifecycle 2.7.0 which is also fine. Given it's beta, moving forward seems appropriate.