Back to Articles
8 min read

Optimizing Recomposition in Wear OS Compose

How to keep wrist-first interfaces responsive by reducing wasteful recomposition and keeping state flows intentional.

Why Recomposition Hurts More on Wearables

On a watch, every extra recomposition competes with battery life, thermal limits, and the very small amount of time a user actually spends looking at the screen. Waste that feels acceptable on a phone becomes obvious much faster on Wear OS.

The most reliable pattern is to keep state as close as possible to the UI that needs it, isolate animated or frequently changing values, and avoid broad top-level state changes that invalidate an entire screen.

Practical Patterns

Split composables at natural state boundaries, debounce input where it improves clarity, and prefer stable immutable models for screen state. These small habits compound quickly on constrained devices.

When you profile a watch UI, look for repeated updates to text, timers, or progress indicators. Those are usually where a tight data flow pays off.

@Composable
fun CounterChip(count: Int, onIncrement: () -> Unit) {
  FilledTonalButton(onClick = onIncrement) {
    Text(text = count.toString())
  }
}