LeoAndo / AndroidGithubSearch

Native Androidで作るGithubリポジトリ検索アプリ
6 stars 0 forks source link

ページング時に結構な頻度でCompose周りでクラッシュする #60

Closed LeoAndo closed 1 year ago

LeoAndo commented 1 year ago

検索ワード「ma」でしばらくページングするとクラッシュする。

--------- beginning of system
--------- beginning of main
--------- beginning of kernel
--------- beginning of crash
2023-01-26 17:19:02.862  8201-8201  AndroidRuntime          com...droidgithubsearch.development  E  FATAL EXCEPTION: main
                                                                                                    Process: com.leoleo.androidgithubsearch.development, PID: 8201
                                                                                                    java.lang.IllegalArgumentException: Key 136026789 was already used. If you are using LazyColumn/Row please make sure you provide a unique key for each item.
                                                                                                        at androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcompose(SubcomposeLayout.kt:411)
                                                                                                        at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$Scope.subcompose(SubcomposeLayout.kt:733)
                                                                                                        at androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScopeImpl.measure-0kLqBqw(LazyLayoutMeasureScope.kt:118)
                                                                                                        at androidx.compose.foundation.lazy.LazyMeasuredItemProvider.getAndMeasure-ZjPyQlc(LazyMeasuredItemProvider.kt:47)
                                                                                                        at androidx.compose.foundation.lazy.LazyListMeasureKt.measureLazyList-jIHJTys(LazyListMeasure.kt:157)
                                                                                                        at androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke-0kLqBqw(LazyList.kt:300)
                                                                                                        at androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke(LazyList.kt:191)
                                                                                                        at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$1$2$1.invoke-0kLqBqw(LazyLayout.kt:71)
                                                                                                        at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$1$2$1.invoke(LazyLayout.kt:69)
                                                                                                        at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$createMeasurePolicy$1.measure-3p2s80s(SubcomposeLayout.kt:591)
                                                                                                        at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:103)
                                                                                                        at androidx.compose.foundation.AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2.invoke-3p2s80s(AndroidOverscroll.kt:561)
                                                                                                        at androidx.compose.foundation.AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2.invoke(AndroidOverscroll.kt:560)
                                                                                                        at androidx.compose.ui.layout.LayoutModifierImpl.measure-3p2s80s(LayoutModifier.kt:285)
                                                                                                        at androidx.compose.ui.node.BackwardsCompatNode.measure-3p2s80s(BackwardsCompatNode.kt:343)
                                                                                                        at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:155)
                                                                                                        at androidx.compose.foundation.AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1.invoke-3p2s80s(AndroidOverscroll.kt:545)
                                                                                                        at androidx.compose.foundation.AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1.invoke(AndroidOverscroll.kt:544)
                                                                                                        at androidx.compose.ui.layout.LayoutModifierImpl.measure-3p2s80s(LayoutModifier.kt:285)
                                                                                                        at androidx.compose.ui.node.BackwardsCompatNode.measure-3p2s80s(BackwardsCompatNode.kt:343)
                                                                                                        at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:155)
                                                                                                        at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:580)
                                                                                                        at androidx.compose.ui.node.BackwardsCompatNode.measure-3p2s80s(BackwardsCompatNode.kt:343)
                                                                                                        at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:155)
                                                                                                        at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1090)
                                                                                                        at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1086)
                                                                                                        at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2139)
                                                                                                        at androidx.compose.runtime.snapshots.SnapshotStateObserver$observeReads$1$1.invoke(SnapshotStateObserver.kt:130)
                                                                                                        at androidx.compose.runtime.snapshots.SnapshotStateObserver$observeReads$1$1.invoke(SnapshotStateObserver.kt:126)
                                                                                                        at androidx.compose.runtime.SnapshotStateKt__DerivedStateKt.observeDerivedStateRecalculations(DerivedState.kt:341)
                                                                                                        at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(Unknown Source:1)
                                                                                                        at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:126)
                                                                                                        at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:120)
                                                                                                        at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:107)
---------------------------- PROCESS STARTED (9374) for package com.leoleo.androidgithubsearch.development ----------------------------
LeoAndo commented 1 year ago

ここで指定しているidは一意な値なのに、、、、、なぜIllegalArgumentExceptionになるのか...。 https://github.com/LeoAndo/AndroidGithubSearch/blob/6fdb13f06f0433d121afd63d47b1902d9ebab345/app/src/main/java/com/leoleo/androidgithubsearch/ui/search/SearchScreen.kt#L109

LeoAndo commented 1 year ago

https://developer.android.com/jetpack/compose/lists?hl=ja#large-datasets

より多くの項目がフェッチされたときにレイジーリストがスクロール位置を記憶できるように、キーは重要です!
The key is important so the Lazy list can remember your scroll position when more items are fetched!

とあるが、公式のpagingサンプルのように一旦Key指定はやめる。 https://android.googlesource.com/platform/frameworks/support/+/HEAD/paging/paging-compose/samples/src/main/java/androidx/paging/compose/samples/PagingSample.kt