ComposePausableCompositionException и IllegalStateException: Apply вызывается на деактивированном узле при быстрой прокрAndroid

Форум для тех, кто программирует под Android
Anonymous
ComposePausableCompositionException и IllegalStateException: Apply вызывается на деактивированном узле при быстрой прокр

Сообщение Anonymous »

Привет всем!
У меня постоянно происходит сбой в проекте Jetpack Compose при использовании Coil (AsyncImage) внутри LazyColumn. Данные отслеживаются из удаленной службы через Flow.
Сбой происходит именно во время высокоскоростной прокрутки (стресс-тестирование). После нескольких попыток я изолировал проблему и подтвердил, что сбой происходит только при наличии AsyncImage. Замена его стандартным изображением решает проблему, которая указывает на состояние гонки во внутренней логике измерения Coil.
Среда:
  • Составить спецификацию: 2026.02.01
  • Версия катушки: 2.2.2
  • Версия Kotlin: 2.0.21
  • Компилятор: Компилятор Kotlin 2.0
Код:
@Composable
fun CountryCardItem(
country: CountryItem,
onCountryClick: (String) -> Unit
) {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = Dimens.dp16, vertical = Dimens.dp6)
.clip(shape = RoundedCornerShape(Dimens.dp12))
.clickable { onCountryClick(country.name.toString()) },
shape = RoundedCornerShape(Dimens.dp12),
elevation = CardDefaults.cardElevation(defaultElevation = Dimens.dp2),
colors = CardDefaults.cardColors(containerColor = Color.White)
) {
Row(
modifier = Modifier
.padding(Dimens.dp12)
.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
Box(
modifier = Modifier
.size(Dimens.dp50)
.shadow(
elevation = Dimens.dp2,
shape =
if (isRadius)
RoundedCornerShape(Dimens.dp16)
else
CircleShape
)
.clip(
if (isRadius)
RoundedCornerShape(Dimens.dp16)
else
CircleShape)
.background(MaterialTheme.colorScheme.surfaceVariant)
) {
AsyncImage(
model = imageUrl,
contentDescription = null,
modifier = Modifier.fillMaxSize(),
contentScale = ContentScale.Crop
)
}

Spacer(modifier = Modifier.width(Dimens.dp16))

Column(
modifier = Modifier.weight(1f)
) {
Text(
text = country.name ?: "Unknown",
style = MaterialTheme.typography.titleMedium,
fontWeight = FontWeight.Bold,
color = MaterialTheme.colorScheme.primary,
)
Text(
text = country.capital ?: "No Capital",
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.secondary,
)
}

Icon(
painter = painterResource(R.drawable.ic_arrow_right),
contentDescription = "Go to details",
tint = MaterialTheme.colorScheme.surfaceVariant,
modifier = Modifier.size(Dimens.dp24)
)
}
}
}


Full Exception Code :
androidx.compose.runtime.ComposePausableCompositionException: Failed to execute op number 24
0: down LayoutNode@ec918ec children: 1 measurePolicy: BoxMeasurePolicy(alignment=BiasAlignment(horizontalBias=-1.0, verticalBias=-1.0), propagateMinConstraints=true) deactivated: false
1: reuse LayoutNode@ec918ec children: 1 measurePolicy: BoxMeasurePolicy(alignment=BiasAlignment(horizontalBias=-1.0, verticalBias=-1.0), propagateMinConstraints=true) deactivated: false
2: apply Function2
3: apply Function2
4: apply Function2
5: apply Function2
6: down LayoutNode@aad474a children: 1 measurePolicy: ColumnMeasurePolicy(verticalArrangement=Arrangement#Top, horizontalAlignment=Horizontal(bias=-1.0)) deactivated: false
7: reuse LayoutNode@aad474a children: 1 measurePolicy: ColumnMeasurePolicy(verticalArrangement=Arrangement#Top, horizontalAlignment=Horizontal(bias=-1.0)) deactivated: false
8: apply Function2
9: apply Function2
10: apply Function2
11: apply Function2
12: down LayoutNode@4bc16bb children: 4 measurePolicy: RowMeasurePolicy(horizontalArrangement=Arrangement#Start, verticalAlignment=Vertical(bias=0.0)) deactivated: false
13: reuse LayoutNode@4bc16bb children: 4 measurePolicy: RowMeasurePolicy(horizontalArrangement=Arrangement#Start, verticalAlignment=Vertical(bias=0.0)) deactivated: false
14: apply Function2
15: apply Function2
16: apply androidx.compose.runtime.Updater$$ExternalSyntheticLambda1@22aca1
17: apply Function2
18: down LayoutNode@b99b0c0 children: 0 measurePolicy: coil.compose.AsyncImageKt$Content$1@4e2bec6 deactivated: false
19: reuse LayoutNode@b99b0c0 children: 0 measurePolicy: coil.compose.AsyncImageKt$Content$1@4e2bec6 deactivated: false
20: apply Function2 21: up
22: down LayoutNode@2a4d7d8 children: 0 measurePolicy: androidx.compose.foundation.layout.SpacerMeasurePolicy@b74cc8f deactivated: true 23: apply Function2 24: apply androidx.compose.runtime.Updater$$ExternalSyntheticLambda1@dcfbe87
25: up
26: down LayoutNode@a008e16 children: 2 measurePolicy: ColumnMeasurePolicy(verticalArrangement=Arrangement#Top, horizontalAlignment=Horizontal(bias=-1.0)) deactivated: true
27: apply Function2
28: apply androidx.compose.runtime.Updater$$ExternalSyntheticLambda1@eb71b4
29: down LayoutNode@8caf1f9 children: 0 measurePolicy: androidx.compose.foundation.text.EmptyMeasurePolicy@61c71dd deactivated: true 30: apply Function2 31: apply androidx.compose.runtime.Updater$$ExternalSyntheticLambda1@2bc0152 32: apply Function2
.....
Caused by: java.lang.IllegalStateException: Apply is called on deactivated node LayoutNode@a5829de children: 0 measurePolicy: androidx.compose.foundation.layout.SpacerMeasurePolicy@fabdd40 deactivated: true at androidx.compose.ui.node.ComposeUiNode$Companion$ApplyOnDeactivatedNodeAssertion$1.invoke(ComposeUiNode.kt:54)


Подробнее: https://stackoverflow.com/questions/799 ... s-called-o

Вернуться в «Android»