mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00

When `PlayerSurface` composable gets a new `Player` object, it should initialise a new Android(Embedded)External Surface with it. However, the lambdas used for that are remembered with the reference to the old Player, even if it has been null'd and released properly. Android(Embedded)ExternalSurface is an interop - `AndroidView` wrapping `SurfaceView` and `TextureView` under the hood. It uses the `onInit` lambda in its factory to create the View and reuses it on later recompositions, making it a longer-lived object than our Player. `RememberUpdatedState` acts makes a mutable State out of the Player and always gets its latest value. One can think of it as creating a reference to the Player object and telling the lambdas to always resolve that reference in the moment, rather than hold onto the Player than was passed-by-value. This change is a precursor to a better lifecycle management of Player and Surface in demo-compose. PiperOrigin-RevId: 705529626
UI module written using Jetpack Compose
Provides UI-related functionality such as Composable functions and Compose State classes. For example, the Surface for rendering media playback, UI state classes for widgets, buttons, and other interactive components.
Getting the module
The easiest way to use the module is to add it as a gradle dependency:
implementation 'androidx.media3:media3-ui-compose:1.X.X'
where 1.X.X
is the version, which must match the version of the other media
modules being used.
Alternatively, you can clone this GitHub project and depend on the module locally. Instructions for doing this can be found in the top level README.