添加lifecycle-viewmodel-compose依赖后,集合random()结果固定异常
解决添加lifecycle-viewmodel-compose:2.5.1后集合random()方法返回固定值的问题
问题现象
添加依赖implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1"后,Kotlin集合的random()方法每次调用都会返回固定结果,重启App、清空内存甚至重装App后输出仍完全一致。移除该依赖后,random()恢复正常随机输出,实体机和虚拟机均能复现此问题,使用的Android Studio版本为Chipmunk 2021.2.1 Patch 1。
解决方案
方案1:升级依赖版本(推荐)
将lifecycle-viewmodel-compose升级到2.6.0及以上版本,该版本已修复此bug:
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.6.0"
方案2:手动指定随机源(临时 workaround)
如果暂时无法升级依赖,可在调用random()时手动传入未被篡改的随机实例,避免使用被固定种子的默认Random:
import kotlin.random.Random var numbers by remember { mutableStateOf("numbersFromSet") } Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center) { val setOfNumbers = setOf(1,2,3,4,5,6,7,8,9) Text(text = numbers, modifier = Modifier.clickable { // 显式使用默认随机源 numbers = setOfNumbers.random(Random.Default).toString() }) }
问题原因
lifecycle-viewmodel-compose:2.5.1存在内部bug,错误地固定了Kotlin标准库中Random类的全局种子,导致所有依赖默认Random实例的方法(包括集合的random()扩展方法)生成固定序列的随机数。2.6.0版本的生命周期库已修复该问题,恢复了Random的正常随机性。
内容的提问来源于stack exchange,提问作者Shelchek
相关产品推荐
相关产品推荐

