The Jetpack Compose internals course is the result of years of deep exploration, experience working on Compose initiatives at big tech companies like Twitter and Disney, and writing the Jetpack Compose Internals book 📖
Likely your best chance to become the next Compose master 🤷♂️
I condensed several years of deep learnings into a single course. Completely self paced. 500+ engineers from top companies have already taken it 🔥
Quick intro to the topics 👇
Clear the air. 🍃
Fewer ingredients, lower emissions, and zero compromise on the finish. PLA Pure is built for printing in the rooms you and your family actually live in. 💚
Experience pure printing here: https://t.co/EGFh9s9Qwo
This is a new one I got yesterday 😅
“small composables are slower because there are more function calls.”
Composable functions are cheap to call, and breaking your UI into smaller functions often helps performance by letting Compose skip and recompose at a finer granularity.
The Jetpack Compose Mechanisms book is finally here! 🚀
A dissection of what runs beneath every Composable function: how the compiler, runtime, and UI actually work, and how all three converge on performance in Jetpack Compose.
https://t.co/wnp7mBA9PO
We’re going Compose First! 🥇 Starting today, we’ll provide all new APIs, libraries, tools, and guidance in Compose only.
Views are now entering maintenance mode, so if you haven't, now's the time to migrate your apps to Jetpack Compose → https://t.co/uncVHiSsFb
#GoogleIO
Indie devs want to believe in UGC the same way people want to believe in fat-loss miracles:
because it promises results without the hard work.
Spoiler: shortcuts don’t work in life. Good things require time and effort. Maturing is embracing this.
“I should wrap everything in remember / derivedStateOf / key just in case.”
Very obvious premature optimization, but also very common. These tools are great when you need them, but. sprinkling them everywhere adds complexity and can even hurt.
Measure first. This behavior normally comes from people with little knowledge about Compose internals. They don’t understand the system and they fallback to adding patches everywhere.
Avoid doing that, take a deep breath, inspect the source code and learn.
“Recomposition is bad” is one of the biggest Compose myths.
Recomposition is how Compose updates the UI when state changes. It’s not a bug.
I’ve seen developers spend hours trying to remove every recomposition, even when there was no actual performance problem.
The goal isn’t zero recompositions. The goal is avoiding unnecessary work that impacts performance significantly.
Measure first. Always. If there’s a real regression, investigate it. Otherwise, let Compose do its job.
"Inline callbacks in Composables are killing my performance."
This is a widespread misconception.
Lambdas can allocate, but the cost is often vastly overstated.
Non-capturing lambdas are cheap, and capturing lambdas only become interesting when they are recreated often enough to matter. More importantly, recent versions of Compose handle this case much better than old advice suggests.
Historically, an inline callback such as onClick = { viewModel .select(id) } would often create a new lambda instance during recomposition.
The concern was not the allocation itself, but the fact that a new lambda instance could make parameter comparisons fail, preventing child composables from being skipped even when nothing meaningful had changed.
With strong skipping enabled, the Compose compiler automatically remembers many lambdas passed to composable parameters.
An inline callback like onClick = { viewModel .select(id) } can be treated as if it had been wrapped in remember{}, using the values it captures as keys.
As long as those captured values remain the same, the callback keeps a stable identity across recompositions, making it much easier for Compose to skip work that doesn't need to happen.
In most apps, lambda allocations are nowhere near the top bottleneck. Don't rewrite clean, readable code based on a vague fear of allocations if you haven't measured first.
Android CLI is stable at v1.0 🛠️
Version 1.0 adds Journeys support and a new ‘studio’ command so agents can integrate directly with @AndroidStudio to access profilers and Compose Previews. @antigravity also now supports Android via the resources bundle.
I wonder why this happens to you. I work at Disney+ and our TV benchmark results on hybrid (Views+Compose) screens have been really good since long ago.
The biggest concern I have for Compose and TV is mainly focusability and talkback navigation. That still needs considerable work.
Compose is slow.
Usually this take comes from someone who measured a debug build or who hit one specific pathological case and generalized from it.
I’ve watched this happen for years. Some people seem determined to find the smoking gun that justifies not migrating.
The reality is much less dramatic. In release builds, well-written Compose is extremely fast, including in interoperability-heavy scenarios.
If you’re evaluating Compose performance, make sure you’re measuring the right thing before drawing conclusions.
There is a reason why Macrobenchmarks don’t run on debug builds.
Compose is slow.
Usually this take comes from someone who measured a debug build or who hit one specific pathological case and generalized from it.
I’ve watched this happen for years. Some people seem determined to find the smoking gun that justifies not migrating.
The reality is much less dramatic. In release builds, well-written Compose is extremely fast, including in interoperability-heavy scenarios.
If you’re evaluating Compose performance, make sure you’re measuring the right thing before drawing conclusions.
There is a reason why Macrobenchmarks don’t run on debug builds.
@Zhuinden No R8, debugging tools, compose tooling and inspection tools are some of the things that:
- improve dev experience
- affect performance
In debug builds