Jetpack Compose

This topic collects Jetpack Compose engineering notes.

It is written for Android developers who are already building with Compose and want clearer answers to questions such as why recomposition happens, why a LazyColumn drops frames, how Modifier chains work internally, and how to keep Compose and the legacy View system alive in the same app during migration.

Learning Path

  1. Start with recomposition and stability. Understand what actually invalidates composition and why some parameters are skippable while others are not.
  2. Move into layout, drawing, and the Modifier pipeline. This is where most subtle UI performance and event-delivery issues come from.
  3. Study animation, gestures, and View interoperability only after the basic runtime model is clear.
  4. Treat Glance, AppWidget, Wear OS, and screenshots as specialized Compose environments rather than simple extensions of screen UI.

Core Articles

Layout, Drawing, and State Scope

Common Questions

  • Why does this composable recompose so often?
  • Should state be read in composition, layout, or draw?
  • When is remember enough, and when do I need derivedStateOf?
  • How should a screen be split to avoid making every state change invalidate the whole tree?
  • How do I migrate a View-based screen without losing lifecycle control or scroll behavior?

Next Step

If your Compose code relies heavily on Flow, StateFlow, and structured concurrency, continue with Kotlin and Coroutines.