| page.title=Power-Saving Optimizations |
| page.keywords=preview,sdk,compatibility |
| sdk.platform.apiLevel=MNC |
| @jd:body |
| |
| <div id="qv-wrapper"> |
| <div id="qv"> |
| |
| <h2>In this document</h2> |
| |
| <ol class="hide-nested"> |
| <li><a href="#behavior-doze">Doze</a></li> |
| <li><a href="#behavior-app-standby">App Standby</a></li> |
| </ol> |
| |
| <h2>API Differences</h2> |
| <ol> |
| <li><a href="{@docRoot}preview/download.html">API level 22 to M Preview »</a> </li> |
| </ol> |
| |
| |
| <h2>See Also</h2> |
| <ol> |
| <li><a href="{@docRoot}preview/api-overview.html">M Developer Preview API Overview</a> </li> |
| </ol> |
| |
| </div> |
| </div> |
| |
| <p>Android M Preview helps prolong battery life by introducing new power-saving optimizations: |
| <em>Doze</em> mode improves the sleep efficiency of idle devices. <em>App Standby</em> prevents apps |
| from eating up power while idle.</p> |
| |
| <h2 id="behavior-doze">Doze</h2> |
| <p>If a user leaves a device unplugged and stationary for a period of time, with the screen off, |
| the device enters Doze mode. Doze attempts to keep the system in a sleep state as long as the |
| device remains undisturbed. In this mode, devices periodically resume normal operations for brief periods of time so that the system can perform app syncing and any other pending operations.</p> |
| |
| <p>The following restrictions apply to your apps while in Doze:</p> |
| <ul> |
| <li>Network access is disabled, unless your app receives a high-priority |
| <a href="https://developers.google.com/cloud-messaging/" class="external-link"> |
| Google Cloud Messaging</a> tickle.</li> |
| <li>The system ignores <a href="{@docRoot}reference/android/os/PowerManager.WakeLock.html"> |
| Wake locks</a>.</li> |
| <li>Alarms scheduled using the {@link android.app.AlarmManager} class are deferred, unless you have |
| exempted them using the |
| {@link android.app.AlarmManager#setAndAllowWhileIdle setAndAllowWhileIdle()} method.</li> |
| <li>The system does not perform Wi-Fi scans.</li> |
| <li>The system does not permit syncs or jobs for your sync adapters.</li> |
| <li>The system does not allow {@link android.app.job.JobScheduler} to run.</li> |
| </ul> |
| </p> |
| <p>When the device exits Doze mode, it executes any jobs and syncs that are pending.</p> |
| |
| <h3>Testing apps with Doze</h3> |
| |
| <p>You can test Doze mode by connecting your development host to a device running the M Preview, |
| and calling the following commands: |
| </p> |
| <pre class="no-prettyprint"> |
| $ adb shell dumpsys battery unplug |
| $ adb shell dumpsys deviceidle step |
| $ adb shell dumpsys deviceidle -h |
| </pre> |
| <p class="note"><strong>Note</strong>: As of M Preview 3 release, |
| <a href="https://developers.google.com/cloud-messaging/" class="external-link"> |
| Google Cloud Messaging</a> (GCM) lets you designate |
| <a href="https://developers.google.com/cloud-messaging/downstream#setting-the-priority-of-a-message"> |
| high-priority messages</a>. If your app receives a high-priority GCM message</a>, the system grants |
| brief network access even when the device is dozing. |
| </p> |
| |
| <p>See the |
| <a href="{@docRoot}preview/testing/guide.html#doze-standby">Testing Guide</a> for tips on how |
| to test Doze in your apps. </p> |
| |
| <h2 id="behavior-app-standby">App Standby</h2> |
| <p>App Standby allows the system to determine that an app is idle when the user is not actively |
| using it. The system makes this determination when the user does not touch the app for a certain |
| period of time, and none of the following conditions applies:</p> |
| |
| <ul> |
| <li>The user explicitly launches the app.</li> |
| <li>The app has a process currently in the foreground (either as an activity or foreground service, |
| or in use by another activity or foreground service).</li> |
| <li>The app generates a notification that users see on the lock screen or in the |
| notification tray.</li> |
| <li>The user explicitly asks for the app to be exempt from optimizations, |
| via the Settings app.</li> |
| </ul> |
| |
| <p>When the user plugs the device into a power supply, the system releases apps from the standby |
| state, allowing them to freely access the network and to execute any pending jobs and syncs. If the |
| device is idle for long periods of time, the system allows idle apps network access around once a |
| day.</p> |
| |
| <h3>Testing apps with App Standby</h3> |
| <p>You can test App Standby by connecting your development host to a device running the M Preview, |
| and calling the following commands: |
| </p> |
| <pre class="no-prettyprint"> |
| $ adb shell dumpsys battery unplug |
| $ adb shell am set-idle <packageName> true |
| $ adb shell am set-idle <packageName> false |
| $ adb shell am get-idle <packageName> |
| </pre> |
| |
| <p class="note"><strong>Note</strong>: |
| As of M Preview 3 release, |
| <a href="https://developers.google.com/cloud-messaging/" class="external-link"> |
| Google Cloud Messaging</a> (GCM) lets you |
| designate |
| <a href="https://developers.google.com/cloud-messaging/downstream#setting-the-priority-of-a-message"> |
| high-priority messages</a>. If your app receives high-priority GCM messages, the system grants |
| brief network access even when the app is idle. |
| </p> |
| |
| <p>See the |
| <a href="{@docRoot}preview/testing/guide.html#doze-standby">Testing Guide</a> for tips on how |
| to test App Standby in your apps. </p> |