Hi everyone,
I'm working on an Android TV app using the latest stable Jetpack Compose. The home screen is a typical streaming layout: a "LazyColumn" containing multiple "LazyRow"s (similar to Netflix/Emby).
I'm seeing noticeable jank while navigating with the D-pad and scrolling, even after the page has already been visited once. So this doesn't appear to be a cold-start issue (initial composition, image loading, etc.). The performance issue persists on subsequent navigation.
I've already applied the common optimizations:
- Stable "key"s for both "LazyColumn" and "LazyRow"
- "contentType" provided
- Stable data models as much as possible
- Per-row "LazyListState"
- Nested prefetch tuning
- Images loaded at the correct display size
- The issue is still present after images are cached
My questions are:
1. Is "LazyColumn" + "LazyRow" still considered the recommended approach for this kind of TV UI?
2. Are there any known performance limitations with this pattern in the latest Compose?
3. What is the best way to determine whether I'm hitting Compose's performance ceiling versus having an optimization issue in my code?
4. Has anyone compared this with a traditional View implementation (e.g. "RecyclerView", or "RecyclerView" + "ComposeView")? Does switching away from Compose typically improve this kind of workload on Android TV?
The project is currently private, but I'm happy to provide repository access to anyone willing to help investigate. I can also share the relevant code paths, Macrobenchmark results, Perfetto traces, Layout Inspector captures, or prepare a minimal reproducible sample if that would be more useful.
Any suggestions or similar experiences would be greatly appreciated. Thanks!