126 lines
4.1 KiB
Plaintext
126 lines
4.1 KiB
Plaintext
page.title=Optimizing for Battery Life
|
|
page.metaDescription=Learn how to help your app go easier on the battery.
|
|
|
|
meta.tags="performance"
|
|
page.tags="performance"
|
|
|
|
@jd:body
|
|
|
|
<div id="qv-wrapper">
|
|
<div id="qv">
|
|
<h2>
|
|
In this document
|
|
</h2>
|
|
<ol>
|
|
<li>
|
|
<a href="#lazy">Lazy First</a>
|
|
</li>
|
|
<li>
|
|
<a href="#features">Platform Features</a>
|
|
</li>
|
|
<li>
|
|
<a href="#toolery">Tooling</a>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
|
|
<p>Battery life is the single most important aspect of the mobile user
|
|
experience. A device without power offers no functionality at all.
|
|
For this reason, it is critically important that apps be as respectful of
|
|
battery life as possible.</p>
|
|
|
|
<p>There are three important things to keep in mind in keeping your app
|
|
power-thrifty:</p>
|
|
<ul>
|
|
<li>Make your apps <em>Lazy First</em>.</li>
|
|
<li>Take advantage of platform features that can help manage your app's battery
|
|
consumption.</li>
|
|
<li>Use tools that can help you identify battery-draining culprits.</li>
|
|
</ul>
|
|
|
|
<h2 id="lazy">Lazy First</h2>
|
|
|
|
<p>Making your app Lazy First means looking for ways to reduce and optimize
|
|
operations that are particularly battery-intensive. The core questions
|
|
underpinning Lazy First design are:
|
|
|
|
<ul>
|
|
|
|
<li><strong>Reduce:</strong> Are there redundant operations your app can cut
|
|
out? For example, can it cache downloaded data instead of repeatedly waking
|
|
up the radio to re-download the data?</li>
|
|
|
|
<li><strong>Defer:</strong> Does an app need to perform an action right
|
|
away? For example,
|
|
can it wait until the device is charging before it backs data up to the
|
|
cloud?</li>
|
|
|
|
<li><strong>Coalesce:</strong> Can work be batched, instead of putting the
|
|
device
|
|
into an active state many times? For example, is it really necessary for
|
|
several dozen apps to each turn on the radio at separate times to send
|
|
their messages? Can the messages instead be transmitted during a
|
|
single awakening of the radio?</li>
|
|
</ul>
|
|
|
|
<p>
|
|
You should ask these questions when it comes to using the CPU,
|
|
the radio, and the screen. Lazy First design is often a good way
|
|
to tame these battery killers.
|
|
</p>
|
|
|
|
<p>
|
|
To help you achieve these and other efficiencies, the Android platform
|
|
provides a number of features to help maximize battery life.
|
|
</p>
|
|
|
|
<h2 id="features">Platform Features</h2>
|
|
|
|
<p>
|
|
Broadly speaking, the Android platform provides two categories of help
|
|
for you to optimize your app's battery use. First, it provides several
|
|
APIs that you can implement in your app. You can learn more about these APIs in
|
|
<a href="/topic/performance/scheduling.html">Intelligent Job Scheduling</a>
|
|
and <a href="/performance/power/network/index.html">
|
|
Network Use and Battery Consumption</a>.
|
|
</p>
|
|
|
|
<p>
|
|
There are also internal mechanisms in the platform to help conserve
|
|
battery life. While they are not APIs that you implement programmatically,
|
|
you should still be aware of them so that your app can leverage them
|
|
successfully. For more information, see
|
|
<a href="/training/monitoring-device-state/doze-standby.html">Doze and
|
|
App Standby</a>.</p>
|
|
|
|
<p>
|
|
You can get even more benefit out of these features by using the tools
|
|
available for the platform to discover the parts of your app that consume
|
|
the most power. Finding what to target is a big step toward
|
|
successful optimization.
|
|
</p>
|
|
|
|
<h2 id ="toolery">Tooling</h2>
|
|
|
|
<p>There are tools for Android, including
|
|
<a href="/studio/profile/dev-options-rendering.html">Profile GPU Rendering</a>
|
|
and <a class="external-link"
|
|
href="https://github.com/google/battery-historian">Battery Historian</a>
|
|
to help you identify areas that you can optimize for better battery life.
|
|
Take advantage of these tools to target areas where you can apply the
|
|
principles of Lazy First.
|
|
</p>
|
|
|
|
<section class="dac-section dac-small" id="latest-games"><div class="wrap">
|
|
<h2 class="norule" style="margin:0 0">More resources</h2>
|
|
<div class="resource-widget resource-flow-layout col-16"
|
|
data-query="collection:develop/performance/landing"
|
|
data-sortOrder="random"
|
|
data-cardSizes="6x6"
|
|
data-maxResults="24"
|
|
data-items-per-page="24"
|
|
data-initial-results="3"></div>
|
|
</div>
|
|
</section>
|