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

Compose声明式逻辑问题:桌面应用两类异常行为排查

问题根源分析

问题1:TextField输入时文件列表重复执行搜索导致卡顿

在RomsList组合函数中,你直接在LazyColumn的content代码块里调用了getRomsFromFolder(folder)。Compose的重组规则是:当界面中任何可观察状态发生变化时,关联的Composable都会重新执行。TextField输入操作会触发界面重组,此时RomsList会被重新调用,而getRomsFromFolder是同步遍历文件系统的操作,每次重组都会重复扫描文件,文件数量大时必然引发卡顿。

同时,你没有对文件搜索结果做缓存处理——哪怕文件夹路径没有变化,只要重组发生,就会重复执行耗时的文件扫描,完全是冗余操作。

问题2:重新选择已选文件夹时文件列表不刷新

你当前通过listRomsState这个布尔状态触发文件列表展示:选择文件夹后将其设为true。但如果重新选择同一个文件夹,两个关键条件都不满足重组触发要求:

  • folderChosenPath是普通变量,没有用mutableStateOf包装,它的变化无法被Compose感知;
  • listRomsState本来就是true,再次设置true属于状态无变更,Compose不会触发任何重组。

这就导致RomsList不会重新执行,自然不会去扫描文件夹的最新内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:51:12