android - Android 进度指示器在 for 循环中一次递增
问题描述
我想在扫描设备中的所有文件时增加进度指示器。这是一个简化的实现:
val totalFiles = 10000
progressBar.max = totalFiles
repeat(totalFiles) {
Thread.sleep(5) // to slow the loop for debugging purposes
binding.circularProgress.incrementProgressBy(1)
}
进度条应该每 5 毫秒递增 1,但相反,它会在循环完成后立即递增。我不明白为什么这不起作用。有什么想法吗?谢谢
解决方案
Thread.sleep()
阻塞主 UI 线程并且进度条没有机会更新自身。
与其阻塞主线程,不如使用一些并发机制(rxjava、协程、异步任务、原始线程)来进行处理,将 UI 更新发布到主线程。
推荐阅读
- java - 关闭应用程序后清除警报管理器设置的警报
- angular - 没有共享秘密的Angular Spring Oauth2没有Angular
- python - WMIC + Python 子进程/ (Windows 10)
- postgresql - 同一服务器上的 2 个数据库之间的 Postgres 复制
- loops - 做一个 while 循环,在 Dart/Flutter 中循环 1 秒
- c# - 将初始化步骤放在 ASP.NET Core Web Api 中的什么位置?
- plotly-dash - 悬停模式:“x 统一”不适用于 Dash
- css - @media 当我使用 888px 或更少时,我的媒体查询不起作用
- html - 导航栏比页面的其余部分长,导致空白
- java - Apache poi ConditionalFormatting 无法正常工作