java.util.ConcurrentModificationException составить реактивный ранец

#android-jetpack-compose

#android-jetpack-compose

Вопрос:

Я хочу применить динамический градиент к поверхности. Когда будет показано новое изображение, в зависимости от цвета этого изображения градиент изменится. Как в примерах Google,

 @Composable
fun DatingHomeScreen() {

var imageId = remember { mutableStateOf(R.drawable.camelia) }
val defaultBitmap = imageResource(id = imageId.value).asAndroidBitmap()
var currentBitmap = mutableStateOf(defaultBitmap)
val swatch = generateDominantColorState(currentBitmap.value)
val dominantColors = listOf(Color(swatch.rgb), Color.Black)

 Box(
        modifier = boxModifier.verticalGradientBackground(
            dominantColors
        )
    ){
    IconButton(
       onClick = {
           imageId.value = getRandomImageId()
             }
          )
   }

}
 

но после сбоя приложения третьего изображения с:

    java.util.concurrentmodificationexception
 

Комментарии:

1. Можете ли вы опубликовать всю свою трассировку стека?

Ответ №1:

getRandomImageId() вероятно, выполняет асинхронную задачу и обновляет значение изображения. Если поток для обновления образа не содержится в одном экземпляре за раз, возникнет исключение.

Взгляните на https://developer.android.com/reference/kotlin/java/util/ConcurrentModificationException