You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose中使用LazyRow出现内存泄漏求助

Jetpack Compose LazyRow 内存泄漏问题求助

我是Jetpack Compose新手,可能操作有误,但使用LazyRow时出现了内存泄漏问题,恳请帮忙解决。

Profiler截图

我的代码如下:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val playLists = mutableListOf<Playlist>()
        val songs = mutableListOf<Songs>()
        val artists = mutableListOf<String>()
        artists.add("Artist 1")
        artists.add("Artist 2")
        songs.add(Songs("Song 1", "image", artists))
        songs.add(Songs("Song 1", "image", artists))
        songs.add(Songs("Song 1", "image", artists))
        playLists.add(Playlist(1, R.drawable.cover, "Your Title", "Album mix", songs = songs))
        playLists.add(Playlist(1, R.drawable.cover, "Your Title", "Album day mix", songs = songs))
        playLists.add(Playlist(1, R.drawable.cover, "Your Title", "Weekend mix", songs = songs))
        playLists.add(Playlist(1, R.drawable.cover, "Your Title", "New release", songs = songs))
        playLists.add(Playlist(1, R.drawable.cover, "Your Title", "Top hits", songs = songs))
        playLists.add(Playlist(1, R.drawable.cover, "Your Title", "Repeat", songs = songs))
        setContent {
            MusicPlayerTheme {
                Box(
                    modifier = Modifier
                        .fillMaxSize()
                        .background(color = Color.Black)
                ) {
                    MainScreen(playList = playLists)
                }
            }
        }
    }
}

@Composable
fun MainScreen(playList: List<Playlist>) {
    Column(modifier = Modifier.fillMaxWidth()) {
        Text(
            text = playList[0].title,
            color = Color.White,
            style = MaterialTheme.typography.headlineSmall,
            fontWeight = FontWeight.Bold,
            modifier = Modifier
                .fillMaxWidth()
                .padding(start = 15.dp, top = 15.dp)
        )
        LazyRow(
            modifier = Modifier
                .fillMaxWidth()
                .padding(10.dp)
        ) {
            items(playList) { playList ->
                AlbumRows(playList = playList)
            }
        }
    }
}

@Composable
fun AlbumRows(
    playList: Playlist
) {
    Column(modifier = Modifier.padding(5.dp)) {
        Card(modifier = Modifier.size(180.dp), shape = RectangleShape) {
            Box(contentAlignment = Alignment.BottomStart) {
                Image(
                    painter = painterResource(id = playList.img),
                    contentDescription = "",
                    contentScale = ContentScale.Crop
                )
                Row(
                    modifier = Modifier
                        .padding(bottom = 12.dp)
                        .height(intrinsicSize = IntrinsicSize.Max)
                        .fillMaxWidth(),
                    verticalAlignment = Alignment.CenterVertically
                ) {
                    Box(
                        modifier = Modifier
                            .width(5.dp)
                            .fillMaxHeight(.8f)
                            .background(color = MaterialTheme.colorScheme.primary)
                    )
                    Text(
                        text = playList.albumTitle,
                        color = Color.White,
                        modifier=Modifier.padding(start = 10.dp),
                        style = MaterialTheme.typography.titleLarge,
                        fontWeight = FontWeight.SemiBold
                    )
                }

                Box(
                    modifier = Modifier
                        .fillMaxWidth()
                        .height(6.dp)
                        .background(color = MaterialTheme.colorScheme.primary)
                )
            }
        }
        val artists = playList.songs[0].artistName.toString()
        Text(
            text = artists.substring(1, artists.length - 1),
            style = MaterialTheme.typography.labelMedium,
            color = Color.LightGray,
            modifier = Modifier
                .padding(top = 10.dp)
                .alpha(.8f)
        )
    }
}

我原以为是画布复用导致的问题,移除相关代码后仍无法解决。


内容的提问来源于stack exchange,提问作者dum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 01:21:57