122 lines
5.0 KiB
Plaintext
122 lines
5.0 KiB
Plaintext
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>
|