Diagnose the jank on a profileable/release-like build while reproducing the same scroll. First determine whether frames are missing because of Compose recomposition, layout/measure work, image decoding, or another main-thread task. Use Layout Inspector to find unnecessary recompositions and inspect the system trace or Android Studio profiler for long work during scroll. JankStats is useful for recording frame metrics and identifying the screens or interactions that drop below the intended fra...
Scanned 9/5/2026
Install to Claude Code
npx -y skills add HoangNguyen0403/agent-skills-standard --skill android-performance --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Android Performance?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hoangnguyen0403-android-performance-933b1e28)More formats (shields.io, HTML) on the badges page.
Diagnose the jank on a profileable/release-like build while reproducing the same scroll. First determine whether frames are missing because of Compose recomposition, layout/measure work, image decoding, or another main-thread task.
Use Layout Inspector to find unnecessary recompositions and inspect the system trace or Android Studio profiler for long work during scroll. JankStats is useful for recording frame metrics and identifying the screens or interactions that drop below the intended frame rate. Measure a baseline, fix one cause at a time, and compare the janky-frame count and frame timing afterward.
For the `LazyColumn` itself:
```kotlin
@Immutable
data class User(val id: String, val name: String, val avatarUrl: String)
LazyColumn {
items(
items = users,
key = { user -> user.id }
) { user ->
UserRow(user)
}
}
```
Use stable item types and stable, unique keys. Do not key by the list index when rows can be inserted, removed, or reordered; without stable keys Compose may discard and recreate more item state than necessary. Keep item lambdas cheap: avoid parsing, sorting, database work, allocations, and expensive formatting in the composition path. Precompute data off the main thread, use `remember` for values whose inputs have not changed, and narrow state reads so a change in one row does not recompose the whole list.
Check the row layout for avoidable measurement work. Remove deeply nested layouts and nested weights where possible; use a simpler `Row`/`Column` arrangement or an appropriate constraint-based layout. If rows contain images, load thumbnails at the displayed size with Coil or Glide, enable memory/disk caching, and use a modest crossfade rather than decoding large network images during a scroll.
Finally, test with realistic data and fast flings, including image loading and empty/loading/error states. A list that is smooth with placeholder text but janks with real images has an image/decode problem, not just a `LazyColumn` problem. Keep the JankStats/trace evidence with the before-and-after measurements so the fix addresses the actual frame bottleneck.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!