I'm currently displaying some bitmaps inside a LazyVerticalGrid
. To avoid out of memory error, I'm trying to recycle bitmap doing the following:
@Composable
fun ComicsList(covers: List<ComicCover>, onComicClicked: (ComicCover) -> Unit) {
LazyVerticalGrid(
columns = GridCells.Fixed(3),
contentPadding = PaddingValues(16.dp),
verticalArrangement = spacedBy(8.dp),
horizontalArrangement = spacedBy(8.dp)
) {
items(
items = covers,
key = { it.id }) {
ComicCoverView(it, onComicClicked)
}
}
}
@Composable
fun ComicCoverView(comic: ComicCover, onComicClicked: (ComicCover) -> Unit) {
Card {
DisposableEffect(
Image(
modifier = Modifier
.height(180.dp)
.clickable { onComicClicked(comic) },
bitmap = comic.cover.asImageBitmap(),
contentDescription = null,
contentScale = ContentScale.FillHeight,
)
) { onDispose { comic.cover.recycle() } }
}
}
But I got the following error:
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@eb4ab61
Any idea on how to properly clean up resources?