What’s new within the Jetpack Compose January ’24 launch


Posted by Ben Trengrove, Android Developer Relations Engineer

Right now, as a part of the Compose January ‘24 Bill of Materials, we’re releasing model 1.6 of Jetpack Compose, Android’s trendy, native UI toolkit that’s used by apps reminiscent of Threads, Reddit, and Dropbox. This launch largely focuses on efficiency enhancements, as we proceed emigrate modifiers and enhance the effectivity of main components of our API.

To make use of as we speak’s launch, improve your Compose BOM model to 2024.01.01

implementation platform(‘androidx.compose:compose-bom:2024.01.01’)


Efficiency continues to be our high precedence, and this launch of Compose has main efficiency enhancements throughout the board. We’re seeing a further ~20% enchancment in scroll efficiency and ~12% enchancment to startup time in our benchmarks, and that is on high of the enhancements from the August ‘23 launch. As with that launch, most apps will see these advantages simply by upgrading to the newest model, with no different code modifications wanted.

The advance to scroll efficiency and startup time comes from our continued give attention to reminiscence allocations and lazy initialization, to make sure the framework is just doing work when it has to. These enhancements will be seen throughout all APIs in Compose, particularly in textual content, clickable, Lazy lists, and graphics APIs, together with vectors, and had been made doable partially by the Modifier.Node refactor work that has been ongoing for a number of releases.

There’s additionally new guidance so that you can create your individual customized modifiers with Modifier.Node.

Configuring the steadiness of exterior lessons

Compose compiler 1.5.5 introduces a brand new compiler possibility to offer a configuration file for what your app considers stable. This selection means that you can mark any class as secure, together with your individual modules, exterior library lessons, and commonplace library lessons, with out having to change these modules or wrap them in a secure wrapper class. Word that the usual stability contract applies; that is simply one other handy technique to let the Compose compiler know what your app ought to think about secure. For extra data on how one can use stability configuration, see our documentation.

Generated code efficiency

The code generated by the Compose compiler plugin has additionally been improved. Small tweaks on this code can result in giant efficiency enhancements as a result of truth the code is generated in each composable operate. The Compose compiler tracks Compose state objects to know which composables to recompose when there’s a change of worth; nonetheless, many state values are solely learn as soon as, and a few state values are by no means learn in any respect however nonetheless change often! This replace permits the compiler to skip the monitoring when it isn’t wanted.

Compose compiler 1.5.6 additionally enables “intrinsic remember” by default. This mode transforms keep in mind at compile time to take note of data we have already got about any parameters of a composable which can be used as a key to keep in mind. This accelerates the calculation of figuring out if a remembered expression wants reevaluating, but in addition means in case you place a breakpoint contained in the keep in mind operate throughout debugging, it could now not be known as, because the compiler has eliminated the utilization of keep in mind and changed it with totally different code.

Composables not being skipped

We’re additionally investing in making the code you write extra performant, mechanically. We need to optimize for the code you intuitively write, eradicating the necessity to dive deep into Compose internals to grasp why your composable is recomposing when it shouldn’t.

This launch of Compose provides help for an experimental mode we’re calling “robust skipping mode”. Sturdy skipping mode relaxes a few of the guidelines about which modifications can skip recomposition, shifting the steadiness in direction of what builders count on. With robust skipping mode enabled, composables with unstable parameters may skip recomposition if the identical cases of objects are handed in to its parameters. Moreover, robust skipping mode mechanically remembers lambdas in composition that seize unstable values, along with the present default habits of remembering lambdas with solely secure captures. Sturdy skipping mode is at present experimental and disabled by default as we don’t think about it prepared for manufacturing utilization but. We’re evaluating its results earlier than aiming to show it on by default in Compose 1.7. See our guidance to experiment with robust skipping mode and assist us discover any points.

Textual content

Adjustments to default font padding

This launch now makes the includeFontPadding setting false by default. includeFontPadding is a legacy property that provides further padding primarily based on font metrics on the high of the primary line and backside of the final line of a textual content. Making this setting default to false brings the default textual content structure extra in step with frequent design instruments, making it simpler to match the design specs generated. Upon upgrading to the January ‘24 launch, you may even see small modifications in your textual content structure and screenshot exams. For extra details about this setting, see the Fixing Font Padding in Compose Text weblog submit and the developer documentation.

Line height with includeFontPadding as false on the left and true on the right.

Help for nonlinear font scaling

The January ‘24 launch makes use of nonlinear font scaling for higher textual content readability and accessibility. Nonlinear font scaling prevents giant textual content components on display screen from scaling too giant by making use of a nonlinear scaling curve. This scaling technique signifies that giant textual content does not scale on the identical price as smaller textual content.

Drag and drop

Compose Basis adds support for platform-level drag and drop, which permits for content material to be dragged between apps on a tool working in multi-window mode. The API is 100% appropriate with the View APIs, which implies a drag and drop began from a View will be dragged into Compose and vice versa. To make use of this API, see the code sample.

Moving image illustrating drag and drop feature

Further options

Different options landed on this launch embody:

    • Help for LookaheadScope in Lazy lists.
    • Fixed composables which were deactivated however stored alive for reuse in a Lazy checklist not being filtered by default from semantics timber.
    • Spline-based keyframes in animations.
    • Added support for choice by mouse, together with textual content.

Get began!

We’re grateful for all the bug experiences and have requests submitted to our issue tracker — they assist us to enhance Compose and construct the APIs you want. Proceed offering your suggestions, and assist us make Compose higher!

Questioning what’s subsequent? Take a look at our roadmap to see the options we’re at present eager about and dealing on. We will’t wait to see what you construct subsequent!

Joyful composing!


Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Check Also
Back to top button