Android LazyColumn OutOfMemoryError
To display all font styles in the font folder(res/font) with LazyColumn:
font folder(
res/font) has manyttffile.
@Composable
fun TextTtfLearn(){
val context: Context = LocalContext.current // It's not the context reason
val fontList: MutableList<FontDate> = mutableListOf()
val fields: Array<Field> = R.font::class.java.fields
try {
for (field in fields){
if (java.lang.reflect.Modifier.isStatic(field.modifiers)){
val fontId = field.getInt(null)
val fontName = field.name
fontList.add(FontDate(fontId = fontId, fontName = fontName))
}
}
}catch (e: Exception){
Log.e(TAG, "TextTtfLearn: ", e)
}
fontList.forEach{ fontDate: FontDate ->
Log.i(TAG, "TextTtfLearn -> fontDate: $fontDate")
}
LazyColumn{
items(fontList){ fontDate: FontDate ->
Text(
text = "Hello World!fontName: ${fontDate.fontName}",
fontFamily = FontFamily(
Font(fontDate.fontId, FontWeight.W700)
),
modifier = Modifier.clickable(
onClick = {
Toast.makeText(context,
"click", Toast.LENGTH_SHORT).show()
},
indication = null,
interactionSource = MutableInteractionSource()
),
)
}
}
}
log as follows:
2024-03-31 10:35:38.347 28832-28851 System textlearn W A resource failed to call close.
2024-03-31 10:35:38.347 28832-28851 System textlearn W A resource failed to call close.
2024-03-31 10:35:40.186 28832-28934 ProfileInstaller textlearn D Installing profile for edu.tyut.textlearn
2024-03-31 10:35:41.156 28832-28849 .textlear textlearn I Clamp target GC heap from 387MB to 384MB
2024-03-31 10:35:41.396 28832-28832 .textlear textlearn I Starting a blocking GC Alloc
2024-03-31 10:35:41.396 28832-28832 .textlear textlearn I Starting a blocking GC Alloc
2024-03-31 10:35:41.402 28832-28832 .textlear textlearn I Alloc young concurrent copying GC freed 2977(145KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 381MB/384MB/384MB, paused 23us total 6.033ms
2024-03-31 10:35:41.402 28832-28832 .textlear textlearn I Starting a blocking GC Alloc
2024-03-31 10:35:41.415 28832-28832 .textlear textlearn I Clamp target GC heap from 405MB to 384MB
2024-03-31 10:35:41.415 28832-28832 .textlear textlearn I Alloc concurrent copying GC freed 373(27KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 381MB/384MB/384MB, paused 20us total 12.954ms
2024-03-31 10:35:41.415 28832-28832 .textlear textlearn I Forcing collection of SoftReferences for 12MB allocation
2024-03-31 10:35:41.415 28832-28832 .textlear textlearn I Starting a blocking GC Alloc
2024-03-31 10:35:41.428 28832-28832 .textlear textlearn I Clamp target GC heap from 404MB to 384MB
2024-03-31 10:35:41.428 28832-28832 .textlear textlearn I Alloc concurrent copying GC freed 9236(392KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 380MB/384MB/384MB, paused 14us total 12.769ms
2024-03-31 10:35:41.428 28832-28832 .textlear textlearn W Throwing OutOfMemoryError "Failed to allocate a 13457183 byte allocation with 3324264 free bytes and 3246KB until OOM, target footprint 402653184, growth limit 402653184" (VmSize 5653948 kB)
2024-03-31 10:35:41.428 28832-28832 .textlear textlearn I Starting a blocking GC Alloc
2024-03-31 10:35:41.428 28832-28832 chatty textlearn I uid=10631(edu.tyut.textlearn) identical 1 line
2024-03-31 10:35:41.432 28832-28832 .textlear textlearn I Starting a blocking GC Alloc
2024-03-31 10:35:41.444 28832-28832 .textlear textlearn I Clamp target GC heap from 404MB to 384MB
2024-03-31 10:35:41.444 28832-28832 .textlear textlearn I Alloc concurrent copying GC freed 3(16KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 380MB/384MB/384MB, paused 18us total 12.010ms
2024-03-31 10:35:41.444 28832-28832 .textlear textlearn I Forcing collection of SoftReferences for 12MB allocation
2024-03-31 10:35:41.444 28832-28832 .textlear textlearn I Starting a blocking GC Alloc
2024-03-31 10:35:41.456 28832-28832 .textlear textlearn I Clamp target GC heap from 404MB to 384MB
2024-03-31 10:35:41.456 28832-28832 .textlear textlearn I Alloc concurrent copying GC freed 8(16KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 380MB/384MB/384MB, paused 14us total 12.410ms
2024-03-31 10:35:41.457 28832-28832 .textlear textlearn W Throwing OutOfMemoryError "Failed to allocate a 13457183 byte allocation with 3324328 free bytes and 3246KB until OOM, target footprint 402653184, growth limit 402653184" (VmSize 5653948 kB)
2024-03-31 10:35:41.462 28832-28832 idRuntime textlearn E FATAL EXCEPTION: main
Process: edu.tyut.textlearn, PID: 28832
java.lang.OutOfMemoryError: Failed to allocate a 13457183 byte allocation with 3324328 free bytes and 3246KB until OOM, target footprint 402653184, growth limit 402653184
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at java.nio.DirectByteBuffer$MemoryRef.<init>(DirectByteBuffer.java:70)
at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:258)
at android.graphics.fonts.Font$Builder.createBuffer(Font.java:248)
at android.graphics.fonts.Font$Builder.<init>(Font.java:172)
at android.graphics.Typeface$Builder.<init>(Typeface.java:441)
at android.content.res.ResourcesImpl.loadFont(ResourcesImpl.java:1090)
at android.content.res.Resources.getFont(Resources.java:478)
at androidx.compose.ui.text.font.ResourceFontHelper.load(AndroidFontLoader.android.kt:88)
at androidx.compose.ui.text.font.AndroidFontLoader_androidKt.load(AndroidFontLoader.android.kt:73)
at androidx.compose.ui.text.font.AndroidFontLoader_androidKt.access$load(AndroidFontLoader.android.kt:1)
at androidx.compose.ui.text.font.AndroidFontLoader.loadBlocking(AndroidFontLoader.android.kt:47)
at androidx.compose.ui.text.font.AndroidFontLoader.loadBlocking(AndroidFontLoader.android.kt:37)
at androidx.compose.ui.text.font.FontListFontFamilyTypefaceAdapterKt.firstImmediatelyAvailable(FontListFontFamilyTypefaceAdapter.kt:187)
at androidx.compose.ui.text.font.FontListFontFamilyTypefaceAdapterKt.access$firstImmediatelyAvailable(FontListFontFamilyTypefaceAdapter.kt:1)
at androidx.compose.ui.text.font.FontListFontFamilyTypefaceAdapter.resolve(FontListFontFamilyTypefaceAdapter.kt:129)
at androidx.compose.ui.text.font.FontFamilyResolverImpl$resolve$result$1.invoke(FontFamilyResolver.kt:93)
at androidx.compose.ui.text.font.FontFamilyResolverImpl$resolve$result$1.invoke(FontFamilyResolver.kt:92)
at androidx.compose.ui.text.font.TypefaceRequestCache.runCached(FontFamilyResolver.kt:185)
at androidx.compose.ui.text.font.FontFamilyResolverImpl.resolve(FontFamilyResolver.kt:92)
at androidx.compose.ui.text.font.FontFamilyResolverImpl.resolve-DPcqOEQ(FontFamilyResolver.kt:79)
at androidx.compose.ui.text.platform.AndroidParagraphIntrinsics$resolveTypeface$1.invoke-DPcqOEQ(AndroidParagraphIntrinsics.android.kt:92)
at androidx.compose.ui.text.platform.AndroidParagraphIntrinsics$resolveTypeface$1.invoke(AndroidParagraphIntrinsics.android.kt:90)
at androidx.compose.ui.text.platform.extensions.TextPaintExtensions_androidKt.applySpanStyle(TextPaintExtensions.android.kt:63)
at androidx.compose.ui.text.platform.AndroidParagraphIntrinsics.<init>(AndroidParagraphIntrinsics.android.kt:109)
at androidx.compose.ui.text.platform.AndroidParagraphIntrinsics_androidKt.ActualParagraphIntrinsics(AndroidParagraphIntrinsics.android.kt:184)
at androidx.compose.ui.text.ParagraphIntrinsicsKt.ParagraphIntrinsics(ParagraphIntrinsics.kt:98)
at androidx.compose.ui.text.MultiParagraphIntrinsics.<init>(MultiParagraphIntrinsics.kt:102)
at androidx.compose.foundation.text.modifiers.MultiParagraphLayoutCache.setLayoutDirection(MultiParagraphLayoutCache.kt:246)
at androidx.compose.foundation.text.modifiers.MultiParagraphLayoutCache.layoutText-K40F9xA(MultiParagraphLayoutCache.kt:271)
at androidx.compose.foundation.text.modifiers.MultiParagraphLayoutCache.layoutWithConstraints-K40F9xA(MultiParagraphLayoutCache.kt:158)
at androidx.compose.foundation.text.modifiers.TextAnnotatedStringNode.measure-3p2s80s(TextAnnotatedStringNode.kt:266)
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)
2024-03-31 10:35:41.462 28832-28832 AndroidRuntime textlearn E at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1495)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2299)
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$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:35)
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.lazy.layout.LazyLayoutMeasureScopeImpl.measure-0kLqBqw(LazyLayoutMeasureScope.kt:123)
at androidx.compose.foundation.lazy.LazyListMeasuredItemProvider.getAndMeasure(LazyListMeasuredItemProvider.kt:48)
at androidx.compose.foundation.lazy.LazyListMeasureKt.measureLazyList-CD5nmq0(LazyListMeasure.kt:124)
at androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke-0kLqBqw(LazyList.kt:306)
at androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke(LazyList.kt:184)
at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$3$2$1.invoke-0kLqBqw(LazyLayout.kt:87)
at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$3$2$1.invoke(LazyLayout.kt:80)
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.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$Companion.observe(Snapshot.kt:2299)
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$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:35)
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.MeasureAndLayoutDelegate.doRemeasure-sdFAvZA(MeasureAndLayoutDelegate.kt:321)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout-0kLqBqw(MeasureAndLayoutDelegate.kt:389)
at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout-0kLqBqw(AndroidComposeView.android.kt:890)
at androidx.compose.ui.node.LayoutNode.forceRemeasure(LayoutNode.kt:1214)
at androidx.compose.foundation.lazy.LazyListState.onScroll$foundation_release(LazyListState.kt:301)
2024-03-31 10:35:41.463 28832-28832 AndroidRuntime textlearn E at androidx.compose.foundation.lazy.LazyListState$scrollableState$1.invoke(LazyListState.kt:162)
at androidx.compose.foundation.lazy.LazyListState$scrollableState$1.invoke(LazyListState.kt:162)
at androidx.compose.foundation.gestures.DefaultScrollableState$scrollScope$1.scrollBy(ScrollableState.kt:166)
at androidx.compose.foundation.gestures.ScrollingLogic$dispatchScroll$performScroll$1.invoke-MK-Hz9U(Scrollable.kt:425)
at androidx.compose.foundation.gestures.ScrollingLogic$dispatchScroll$performScroll$1.invoke(Scrollable.kt:417)
at androidx.compose.foundation.AndroidEdgeEffectOverscrollEffect.applyToScroll-Rhakbz0(AndroidOverscroll.kt:180)
at androidx.compose.foundation.gestures.ScrollingLogic.dispatchScroll-3eAAhYA(Scrollable.kt:438)
at androidx.compose.foundation.gestures.ScrollDraggableState.dragBy(Scrollable.kt:526)
at androidx.compose.foundation.gestures.DraggableNode$pointerInputNode$1$1$1$1.invokeSuspend(Draggable.kt:311)
at androidx.compose.foundation.gestures.DraggableNode$pointerInputNode$1$1$1$1.invoke(Unknown Source:8)
at androidx.compose.foundation.gestures.DraggableNode$pointerInputNode$1$1$1$1.invoke(Unknown Source:4)
at androidx.compose.foundation.gestures.ScrollDraggableState$drag$2.invokeSuspend(Scrollable.kt:534)
at androidx.compose.foundation.gestures.ScrollDraggableState$drag$2.invoke(Unknown Source:8)
at androidx.compose.foundation.gestures.ScrollDraggableState$drag$2.invoke(Unknown Source:4)
at androidx.compose.foundation.gestures.DefaultScrollableState$scroll$2$1.invokeSuspend(ScrollableState.kt:181)
at androidx.compose.foundation.gestures.DefaultScrollableState$scroll$2$1.invoke(Unknown Source:8)
at androidx.compose.foundation.gestures.DefaultScrollableState$scroll$2$1.invoke(Unknown Source:4)
at androidx.compose.foundation.MutatorMutex$mutateWith$2.invokeSuspend(MutatorMutex.kt:173)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
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:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:271)
at android.app.ActivityThread.main(ActivityThread.java:8305)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:992)
Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [androidx.compose.ui.platform.MotionDurationScaleImpl@7df0e34, androidx.compose.runtime.BroadcastFrameClock@85145d, StandaloneCoroutine{Cancelling}@1cc31d2, AndroidUiDispatcher@58b62a3]
How do I solve the OOM problem?