Android · Kotlin · Jetpack Compose
Android Seeker
Notes on the Android framework, from the inside out.
I dig into how Android actually works beneath the APIs — the runtime, the UI toolkit, concurrency, and the build system — and write it down from first principles, with code.
Latest writing
- Animation Patterns: Which Tool Fits Which AnimationWhich animation tool to reach for - built-in animate*AsState, Modifier.Node, or a wrapper - mapped to value-change, triggered, and continuous animations, with code.
- When (and When Not) to Write a Custom Modifier.NodeA decision framework for choosing between built-in modifiers, lambda modifiers, wrapper composables, effects, and a full Modifier.Node - grounded in Compose internals.
- The Compose Measure Phase: Measurable, Constraints, Placeable, layout(), place()The measure phase as a top-down conversation: the parent hands a child a Constraints budget, the child returns a sized Placeable, and the layout between can rewrite both.
- Custom Modifiers with Modifier.NodeBuilding production custom modifiers from three pieces - an extension function, a ModifierNodeElement, and a Modifier.Node - with real lifecycle and in-place updates.
- Compose: Component Identity, the Slot Table, and State LifecycleHow Compose tracks composable identity through the slot table, how remember and key() really work, and the only three ways state ever resets.
- Modifiers vs Single-Child Wrapper ComposablesWhy a Modifier.foo() beats a Foo { content } wrapper for decorating a single child: preserved node identity, flat chaining, and fewer layout nodes.