A single mutableStateOf at the top of your composable tree causes full-screen recomposition on every keystroke. Hoisting state to the narrowest common ancestor narrows recomposition scope, enables stateless previews, and keeps unidirectional data flow honest.
Strong Skipping mode in Jetpack Compose Compiler 1.5.0+ infers lambda stability automatically, but conservative capture analysis and cross-module limits mean you must verify with compiler metrics and Layout Inspector before relying on it.
Step-by-step diagnostic guide to identify and fix unnecessary Compose recompositions causing UI jank, with a symptom table, ordered verification checks, targeted fixes, and escalation criteria.
A diagnostic guide for UI stutter in Jetpack Compose LazyColumn caused by excessive recompositions. Covers recognizable symptoms, a cause table, ordered checks with Layout Inspector and Profiler, fixes tied to findings, and escalation criteria.
A decision guide for the LazyColumn key parameter: when stable IDs matter, why index keys are a trap, and how to verify state survives inserts and reorders.
Reading LazyListState directly recomposes your UI on every scroll pixel. derivedStateOf limits recomposition to when the computed result actually changes — here's how it works and when it backfires.
Use derivedStateOf to memoize filtered lists and UI flags in Jetpack Compose so recomposition only happens when the projected result actually changes, not on every source update.
I am working with Jetpack Compose 1.4 or later and need to understand whether the framework can infer stable keys for items in a LazyColumn or LazyRow when the underlying list is reordered or filtered. The documentation indicates that explicit keys are required to avoid unintended recompositions, but it is unclear whether any automatic key inference exists f