Partial wake locks are a mechanism in the
PowerManager
API
that lets developers keep the CPU running after a device's display turns off
(whether due to system timeout or the user pressing the power button). Your
app acquires a partial wake lock by calling
acquire()
with the
PARTIAL_WAKE_LOCK
flag. A partial wake lock becomes stuck if it is held for a long time while
your app is running in the
background (no part of your app is visible to the user). This condition drains
the device's battery because it prevents the device from entering lower power
states. Partial wake locks should be used only when necessary and released as
soon as no longer needed.
If your app has a stuck partial wake lock, you can use the guidance in this page to diagnose and fix the problem.
Detect the problem
You may not always know that your app's partial wake locks are stuck. If you have already published your app, Android vitals can help make you aware of the problem.
Android vitals
Android vitals can help improve your app's performance by alerting you via the Play Console when your app is exhibiting stuck partial wake locks. Android vitals reports partial wake locks as stuck when at least one, hour-long, while in the background, partial wake lock occurs in a battery session.
The definition of battery session depends on the platform version.
- In Android 10, a battery session is the aggregation of all battery reports received within a given 24-hour period. A battery report refers to the interval between two battery charges either from below 20% to above 80% or from any charge level to 100%.
- In Android 11, a battery session is a fixed 24-hour period.
The number of battery sessions displayed is an aggregate for all measured users of the app. For information on how Google Play collects Android vitals data, see the Play Console documentation.
Once you're aware that your app has excessive stuck partial wake locks, your next step is to address the issue.
Fix the problem
Because wake locks can drain the device battery, you shouldn't use wake locks if there's an alternative. The Choose the right API to keep the device awake documentation can help you find the best solution for your app.
If you do need to use a wake lock, follow wake lock best practices to make sure your wake locks don't hurt device efficiency. In particular, make sure every device you acquire is released, and release the lock as quickly as possible.
After fixing the problem in code, verify that your app correctly releases wake locks by using the following tools:
dumpsys - a tool that provides information about the status of system services on a device. To see the status of the power service, which includes a list of wake locks, run
adb shell dumpsys power
.Battery Historian - a tool that parses the output of an Android bug report into a visual representation of power related events.
No recommendations at this time.
Try signing in to your Google account.