Optimize power usage by gating UI work and polling on interactivity#1945
Merged
Conversation
- Introduce `WearLifecycleState` to track whether the app is in the foreground and the device is in an active (non-ambient) state. - Update `WearMainActivity` to monitor ambient mode transitions using `AmbientLifecycleObserver`. - Gate continuous animations, such as the EQ icon and play-button rotation, on the interactive state to save battery. - Optimize polling loops in `VolumeScreen`, `OutputScreen`, and `WearPlayerViewModel` by increasing delays and pausing work when the screen is off or in ambient mode. - Improve `PlayerScreen` performance by memoizing background brushes to reduce GC churn and aligning clock updates to minute boundaries. - Gate player position updates in `WearLocalPlayerRepository` to avoid unnecessary `StateFlow` churn when the UI is not visible.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
WearLifecycleStateto track whether the app is in the foreground and the device is in an active (non-ambient) state.WearMainActivityto monitor ambient mode transitions usingAmbientLifecycleObserver.VolumeScreen,OutputScreen, andWearPlayerViewModelby increasing delays and pausing work when the screen is off or in ambient mode.PlayerScreenperformance by memoizing background brushes to reduce GC churn and aligning clock updates to minute boundaries.WearLocalPlayerRepositoryto avoid unnecessaryStateFlowchurn when the UI is not visible.