Hi' I'm getting following crash in few devices wit...
# compose
r
Hi' I'm getting following crash in few devices with
Free Ram < 1gb
, Exception log in 🧵
Copy code
Fatal Exception: java.lang.ClassCastException: androidx.compose.foundation.layout.q0 cannot be cast to androidx.compose.runtime.z0
       at androidx.compose.runtime.ComposerImpl.addRecomposeScope(ComposerImpl.java:2448)
       at androidx.compose.runtime.ComposerImpl.startRestartGroup(ComposerImpl.java:2436)
       at androidx.compose.foundation.layout.SpacerKt.Spacer(SpacerKt.java:32)
       at chat.feature.privacy.PrivacyScreenKt$PrivacyScreen$2$3$1$invoke$$inlined$itemsIndexed$default$2.invoke(PrivacyScreenKt.java:330)
       at androidx.compose.foundation.lazy.LazyDslKt$itemsIndexed$2.invoke(LazyDslKt.java:108)
       at chat.feature.privacy.PrivacyScreenKt$PrivacyScreen$2$3$1$invoke$$inlined$itemsIndexed$default$2.invoke(PrivacyScreenKt.java:108)
       at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambdaImpl.java:135)
       at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambdaImpl.java:34)
       at androidx.compose.foundation.lazy.LazyListScopeImpl$items$1$1.invoke(LazyListScopeImpl.java:179)
       at androidx.compose.foundation.lazy.LazyListScopeImpl$items$1$1.invoke(LazyListScopeImpl.java:179)
       at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambdaImpl.java:107)
       at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambdaImpl.java:34)
       at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocalKt.java:193)
       at androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolderImpl.java:84)
       at androidx.compose.foundation.lazy.LazyListItemContentFactory$CachedItemContent$content$1.invoke(LazyListItemContentFactory.java:106)
       at androidx.compose.foundation.lazy.LazyListItemContentFactory$CachedItemContent$content$1.invoke(LazyListItemContentFactory.java:100)
       at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambdaImpl.java:107)
       at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambdaImpl.java:34)
       at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2$1$1.invoke(SubcomposeLayoutState.java:239)
       at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2$1$1.invoke(SubcomposeLayoutState.java:239)
       at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambdaImpl.java:107)
       at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambdaImpl.java:34)
       at androidx.compose.runtime.ComposerKt.invokeComposable(ComposerKt.java:3276)
       at androidx.compose.runtime.ComposerImpl.doCompose(ComposerImpl.java:2551)
       at androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(ComposerImpl.java:2514)
       at androidx.compose.runtime.CompositionImpl.composeContent(CompositionImpl.java:453)
       at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.java:702)
       at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release(ComposerImpl.java:2951)
       at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release(ComposerImpl.java:2951)
       at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release(ComposerImpl.java:2951)
       at androidx.compose.runtime.CompositionImpl.setContent(CompositionImpl.java:407)
       at androidx.compose.ui.layout.SubcomposeLayoutState.subcomposeInto(SubcomposeLayoutState.java:257)
       at androidx.compose.ui.layout.SubcomposeLayoutState.access$createMeasurePolicy(SubcomposeLayoutState.java:145)
       at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2.invoke(SubcomposeLayoutState.java:232)
       at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2.invoke(SubcomposeLayoutState.java:229)
       at androidx.compose.runtime.snapshots.SnapshotStateObserver.withNoObservations(SnapshotStateObserver.java:137)
       at androidx.compose.ui.node.OwnerSnapshotObserver.withNoSnapshotReadObservation$ui_release(OwnerSnapshotObserver.java:49)
       at androidx.compose.ui.node.LayoutNode.withNoSnapshotReadObservation$ui_release(LayoutNode.java:1067)
       at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose(SubcomposeLayoutState.java:229)
       at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose(SubcomposeLayoutState.java:224)
       at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose$ui_release(SubcomposeLayoutState.java:213)
       at androidx.compose.ui.layout.SubcomposeLayoutState$Scope.subcompose(SubcomposeLayoutState.java:445)
       at androidx.compose.foundation.lazy.LazyMeasuredItemProvider.getAndMeasure-ZjPyQlc(LazyMeasuredItemProvider.java:48)
       at androidx.compose.foundation.lazy.LazyListMeasureKt.measureLazyList-nqpP7js(LazyListMeasureKt.java:134)
       at androidx.compose.foundation.lazy.LazyListKt$LazyList$1.invoke-0kLqBqw(LazyListKt.java:151)
       at androidx.compose.foundation.lazy.LazyListKt$LazyList$1.invoke(LazyListKt.java:95)
       at androidx.compose.ui.layout.SubcomposeLayoutState$createMeasurePolicy$1.measure-3p2s80s(SubcomposeLayoutState.java:335)
       at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.java:45)
       at androidx.compose.foundation.layout.PaddingValuesModifier.measure-3p2s80s(PaddingValuesModifier.java:416)
       at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.java:37)
       at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(SimpleGraphicsLayerModifier.java:213)
       at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.java:37)
       at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.java:108)
       at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.java:108)
       at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.java:108)
       at androidx.compose.foundation.layout.PaddingValuesModifier.measure-3p2s80s(PaddingValuesModifier.java:416)
       at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.java:37)
       at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.java:95)
       at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.java:94)
       at androidx.compose.runtime.snapshots.Snapshot.enter(Snapshot.java:115)
       at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.java:1787)
       at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.java:116)
       at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.java:75)
       at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.java:63)
       at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.java:94)
       at androidx.compose.ui.node.LayoutNode.remeasure-BRTryo0$ui_release(LayoutNode.java:1192)
       at androidx.compose.ui.node.LayoutNode.remeasure-BRTryo0$ui_release$default(LayoutNode.java:1190)
       at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-0kLqBqw(MeasureAndLayoutDelegate.java:172)
       at androidx.compose.ui.node.MeasureAndLayoutDelegate.access$getPostponedMeasureRequests$p(MeasureAndLayoutDelegate.java:39)
       at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.java:212)
       at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout(AndroidComposeView.java:495)
       at androidx.compose.ui.node.LayoutNode.forceRemeasure(LayoutNode.java:1210)
       at androidx.compose.foundation.lazy.LazyListState.onScroll$foundation_release(LazyListState.java:238)
       at androidx.compose.foundation.lazy.LazyListState$scrollableState$1.invoke(LazyListState.java:139)
       at androidx.compose.foundation.lazy.LazyListState$scrollableState$1.invoke(LazyListState.java:139)
       at androidx.compose.foundation.gestures.DefaultScrollableState$scrollScope$1.scrollBy(DefaultScrollableState.java:134)
       at androidx.compose.foundation.gestures.ScrollingLogic.dispatchScroll(ScrollingLogic.java:191)
       at androidx.compose.foundation.gestures.ScrollingLogic$doFlingAnimation$2$outerScopeScroll$1.invoke(ScrollingLogic.java:222)
       at androidx.compose.foundation.gestures.ScrollingLogic$doFlingAnimation$2$outerScopeScroll$1.invoke(ScrollingLogic.java:221)
       at androidx.compose.foundation.gestures.ScrollingLogic$doFlingAnimation$2$scope$1.scrollBy(ScrollingLogic.java:227)
       at androidx.compose.foundation.gestures.DefaultFlingBehavior$performFling$2.invoke(DefaultFlingBehavior.java:313)
       at androidx.compose.foundation.gestures.DefaultFlingBehavior$performFling$2.invoke(DefaultFlingBehavior.java:311)
       at androidx.compose.animation.core.SuspendAnimationKt.doAnimationFrame(SuspendAnimationKt.java:319)
       at androidx.compose.animation.core.SuspendAnimationKt.access$doAnimationFrame(SuspendAnimationKt.java:1)
       at androidx.compose.animation.core.SuspendAnimationKt$animate$9.invoke(SuspendAnimationKt.java:262)
       at androidx.compose.animation.core.SuspendAnimationKt$animate$9.invoke(SuspendAnimationKt.java:261)
       at androidx.compose.runtime.BroadcastFrameClock$FrameAwaiter.resume(BroadcastFrameClock.java:42)
       at androidx.compose.runtime.BroadcastFrameClock.sendFrame(BroadcastFrameClock.java:63)
       at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.java:422)
       at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.java:415)
       at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.java:34)
       at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.java:109)
       at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.java:41)
       at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.java:69)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:909)
       at android.view.Choreographer.doCallbacks(Choreographer.java:723)
       at android.view.Choreographer.doFrame(Choreographer.java:655)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
       at android.os.Handler.handleCallback(Handler.java:790)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:7000)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
f
Use Canary Leak to detect memory leaks?
r
its not memory leak, we do have leakcanary integration in debug variant to detect leaks during development. And this issue is not happening in all devices, QA team also unable to replicate this with same devices.
f
Copy code
Fatal Exception: java.lang.ClassCastException: androidx.compose.foundation.layout.q0 cannot be cast to androidx.compose.runtime.z0
Erm, Proguard? 😉
i don't see out of memory error in your log
r
proguard issue will happen in all devices if we install release apk
f
not always, i would say that you have specific use case in those devices
where layout cannot be rendered due to this class cast
might be a bug in jetpack
🐞 1
r
@Adam Powell sorry for tagging you, can u help me out here, I've raised this issue earlier but got lost in the channel. If this is compose issue I'll create ticket.
a
when in doubt, create a ticket 🙂