build.gradle - Jetpack Compose 生命周期 View 模型依赖性使得集合中的 random() 不是随机的

标签 build.gradle android-jetpack-compose android-viewmodel

在我的项目中添加依赖项“实现“androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1””后,我注意到任何集合中的 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().toString()
    })
}

我使用什么集合以及它的存储位置并不重要。看起来添加依赖项后 random() 的输出变得预定义。我可以在物理和虚拟设备上看到这种行为。从 gradle 中删除依赖项后,random() 将按预期工作。我总是看到随机结果。 如果有问题的话,我正在使用 android studio Chipmunk 2021.2.1 Patch 1 我将非常感谢您的回答

最佳答案

对于您的问题,您可以使用以下解决方案每次都获得不同的数字。 它只是在每次点击时更改Randomseed

numbers = setOfNumbers.random(Random(System.currentTimeMillis())).toString()

Kotlin Random 之所以给出相同的数字,是因为它使用相同的 seed,更多详细信息 herehere 。 我不确定为什么这种情况只发生在特定的依赖项上。然而,当使用该依赖项时,上述解决方案也将起作用,因为种子是唯一的。

关于build.gradle - Jetpack Compose 生命周期 View 模型依赖性使得集合中的 random() 不是随机的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74706246/

相关文章:

Android - 如果 View 模型包含 Activity 监听器引用,是否会发生内存泄漏?

android - 带有 viewmodel 和实时数据的 ViewPager,所有 6 个选项卡数据都被最后一个选项卡数据替换

flutter Firebase错误 "FAILURE: Build failed with an exception"

java - 构建多文物以进行Vaadin应用[Gradle]

android - Jetpack 撰写 : Make full-screen (absolutely positioned) component

android - 如何使用 navGraph 范围初始化 viewModel

Android Studio :failed to resolve:com. 泄漏.slideswitch :app:1. 0.0

gradle - Gradle Copy Typed Task进行配置时没有错误,但是具有复制关闭功能的等效nontyped任务失败

android - 我们可以在另一个类中使用来自其他类的可组合函数吗?

kotlin - Compose for Desktop LazyRow/LazyColumn 不通过鼠标单击滚动