1174 lines
48 KiB
Plaintext
1174 lines
48 KiB
Plaintext
page.title=Android KitKat
|
||
|
||
@jd:body
|
||
|
||
|
||
<style>
|
||
</style>
|
||
|
||
<script>
|
||
function revealSection(hashy) {
|
||
if (hashy != "" && !$(hashy).is(":visible")) {
|
||
sectionId = $(hashy).closest(".version-section").attr("id");
|
||
link = $("#title-tabs a[href$="+sectionId+"]");
|
||
link.parent().addClass("selected");
|
||
link.parent().siblings().removeClass("selected");
|
||
|
||
sectionDiv = $(".version-section"+link.attr("href"));
|
||
if (sectionDiv.length) {
|
||
$(".version-section").hide();
|
||
sectionDiv.show();
|
||
}
|
||
|
||
$('html, body').animate({
|
||
scrollTop: $(hashy).offset().top
|
||
}, 100);
|
||
}
|
||
}
|
||
|
||
$(document).ready(function() {
|
||
$("#title-tabs li a").each(function() {
|
||
$(this).click(function(){
|
||
$(this).parent().addClass("selected");
|
||
$(this).parent().siblings().removeClass("selected");
|
||
$(".version-section").hide();
|
||
$($(this).attr("href")).show();
|
||
return false;
|
||
});
|
||
});
|
||
|
||
hashy = escapeHTML(location.hash);
|
||
revealSection(hashy);
|
||
});
|
||
|
||
window.onhashchange = function () {
|
||
revealSection(escapeHTML(location.hash));
|
||
}
|
||
|
||
</script>
|
||
|
||
<style>
|
||
|
||
</style>
|
||
|
||
<!-- BEGIN ANDROID 4.4 -->
|
||
<div id="44-android-44" class="version-section">
|
||
|
||
<div style="padding:0px 0px 0px 60px;margin-top:-20px;float:right;">
|
||
<img src="{@docRoot}images/kk-devices.png" alt="Android 4.4 on phone and tablet" width="380">
|
||
</div>
|
||
|
||
<div class="landing-docs" style="float:right;clear:both;margin:22px 0 2em 3em;">
|
||
<div class="col-4 normal-links highlights" style="font-size:12px;">
|
||
<h3 id="thisd" >Key Developer Features</h3>
|
||
<ul style="list-style-type:none;">
|
||
<!--<li><a href="#44-ui">UI refresh</a></li>-->
|
||
<li><a href="#44-hce">Host Card Emulation</a></li>
|
||
<li><a href="#44-printing">Printing framework</a></li>
|
||
<li><a href="#44-storage-access">Storage access framework</a></li>
|
||
<li><a href="#44-sensors">Low-power sensors</a></li>
|
||
<li><a href="#44-sms-provider">SMS provider</a></li>
|
||
<li><a href="#44-immersive">Full-screen Immersive mode</a></li>
|
||
<li><a href="#44-transitions">Transitions framework</a></li>
|
||
<li><a href="#44-webview">Chromium WebView</a></li>
|
||
<li><a href="#44-screen-recording">Screen recording</a></li>
|
||
<li><a href="#44-renderscript-ndk">RenderScript NDK</a></li>
|
||
<li><a href="#44-bluetooth">Bluetooth HOGP and MAP</a></li>
|
||
<li><a href="#44-ir-blasters">IR Blasters</a></li>
|
||
<li><a href="#44-closed-captioning">Closed captioning settings</a></li>
|
||
<li><a href="#44-international-users">RTL features</a></li>
|
||
<li><a href="#44-security">Security enhancements</a></li>
|
||
<li><a href="#44-tools">Tools for analyzing memory use</a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
<p>Welcome to Android 4.4 KitKat!</p>
|
||
|
||
<p>
|
||
Android KitKat brings all of Android's most innovative, most beautiful, and
|
||
most useful features to more devices everywhere.
|
||
</p>
|
||
|
||
<p>
|
||
This document provides a glimpse of what's new for developers.
|
||
</p>
|
||
|
||
<p>
|
||
Find out more about KitKat for consumers at <a href=
|
||
"http://www.android.com/versions/kit-kat-4-4/">www.android.com</a>.
|
||
</p>
|
||
|
||
|
||
<h2 id="svelte" style="line-height:1.25em;">Making Android for everyone</h2>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> is designed to run fast,
|
||
smooth, and responsively on a much broader range of devices than ever before
|
||
— including on millions of entry-level devices around the world that
|
||
have as little as <strong>512MB RAM</strong>.
|
||
</p>
|
||
|
||
<p>
|
||
KitKat streamlines every major component to reduce memory use and introduces
|
||
new APIs and tools to help you create innovative, responsive,
|
||
memory-efficient applications.
|
||
</p>
|
||
|
||
<p>
|
||
OEMs building the next generation of Android devices can take advantage of
|
||
<strong>targeted recommendations and options</strong> to run <span style=
|
||
"white-space:nowrap;">Android 4.4</span> efficiently, even on low-memory
|
||
devices. Dalvik JIT code cache tuning, kernel samepage merging (KSM), swap to
|
||
zRAM, and other optimizations help manage memory. New configuration options
|
||
let OEMs tune out-of-memory levels for processes, set graphics cache sizes,
|
||
control memory reclaim, and more.
|
||
</p>
|
||
|
||
<p>
|
||
In Android itself, changes across the system improve memory management and
|
||
reduce memory footprint. Core system processes are trimmed to <strong>use
|
||
less heap</strong>, and they now more <strong>aggressively protect system
|
||
memory</strong> from apps consuming large amounts of RAM. When multiple
|
||
services start at once — such as when network connectivity changes
|
||
— Android now <strong>launches the services serially</strong>, in small
|
||
groups, to avoid peak memory demands.
|
||
</p>
|
||
|
||
<p>
|
||
For developers, <span style="white-space:nowrap;">Android 4.4</span> helps
|
||
you deliver <strong>apps that are efficient and responsive</strong> on all
|
||
devices. A new API, <span style=
|
||
"font-size:11.5px;font-family:monospace;">ActivityManager.isLowRamDevice()</span>,
|
||
lets you tune your app's behavior to match the device's memory configuration.
|
||
You can modify or disable large-memory features as needed, depending on the
|
||
use-cases you want to support on entry-level devices. Learn more about
|
||
optimizing your apps for low-memory devices <a
|
||
href="{@docRoot}training/articles/memory.html">here</a>.
|
||
</p>
|
||
|
||
<p>
|
||
New tools give also give you powerful insight into your app's memory use. The
|
||
<strong>procstats tool</strong> details memory use over time, with run times
|
||
and memory footprint for foreground apps and background services. An
|
||
on-device view is also available as a new developer option. The
|
||
<strong>meminfo tool</strong> is enhanced to make it easier to spot memory
|
||
trends and issues, and it reveals additional memory overhead that hasn't
|
||
previously been visible.
|
||
</p>
|
||
|
||
|
||
<h2 id="44-hce">New NFC capabilities through Host Card Emulation</h2>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> introduces new platform
|
||
support for secure NFC-based transactions through <strong>Host Card
|
||
Emulation</strong> (HCE), for payments, loyalty programs, card access,
|
||
transit passes, and other custom services. With HCE, any app on an Android
|
||
device can emulate an NFC smart card, letting users tap to initiate
|
||
transactions with an app of their choice — no provisioned secure
|
||
element (SE) in the device is needed. Apps can also use a new <strong>Reader
|
||
Mode</strong> to act as readers for HCE cards and other NFC-based
|
||
transactions.
|
||
</p>
|
||
|
||
<div style="float:right;margin:32px;width:200px;">
|
||
<img src="{@docRoot}images/kk-contactless-card.png" alt="" width="200" style=
|
||
"margin-bottom:0;">
|
||
</div>
|
||
|
||
<p>
|
||
Android HCE emulates ISO/IEC 7816 based smart cards that use the contactless
|
||
ISO/IEC 14443-4 (ISO-DEP) protocol for transmission. These cards are used by
|
||
many systems today, including the existing EMVCO NFC payment infrastructure.
|
||
Android uses Application Identifiers (AIDs) as defined in ISO/IEC 7816-4 as
|
||
the basis for routing transactions to the correct Android applications.
|
||
</p>
|
||
|
||
<p>
|
||
Apps declare the AIDs they support in their manifest files, along with a
|
||
category identifier that indicates the type of support available (for
|
||
example, "payments"). In cases where multiple apps support the same AID in
|
||
the same category, Android displays a dialog that lets the user choose which
|
||
app to use.
|
||
</p>
|
||
|
||
<p>
|
||
When the user taps to pay at a point-of-sale terminal, the system extracts
|
||
the preferred AID and routes the transaction to the correct application. The
|
||
app reads the transaction data and can use any local or network-based
|
||
services to verify and then complete the transaction.
|
||
</p>
|
||
|
||
<p>
|
||
Android HCE requires an NFC controller to be present in the device. Support
|
||
for HCE is already widely available on most NFC controllers, which offer
|
||
dynamic support for both HCE and SE transactions. <span style=
|
||
"white-space:nowrap;">Android 4.4</span> devices that support NFC will
|
||
include Tap & Pay for easy payments using HCE.
|
||
</p>
|
||
|
||
|
||
<h2 id="44-printing">Printing framework</h2>
|
||
|
||
<p>
|
||
Android apps can now print any type of content over Wi-Fi or
|
||
cloud-hosted services such as Google Cloud Print. In print-enabled apps,
|
||
users can discover available printers, change paper sizes, choose specific
|
||
pages to print, and print almost any kind of document, image, or file.
|
||
</p>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> introduces native
|
||
platform support for printing, along with APIs for managing printing and
|
||
adding new types of printer support. The platform provides a print manager
|
||
that mediates between apps requesting printing and installed print services
|
||
that handle print requests. The print manager provides shared services and a
|
||
system UI for printing, giving users consistent control over printing from
|
||
any app. The print manager also ensures the security of content as it's
|
||
passed across processes, from an app to a print service.
|
||
</p>
|
||
|
||
<div style="float:right;margin:22px 0px 0px 24px;width:490px;">
|
||
<img src="{@docRoot}images/kk-print-land-n5.jpg" alt="" width="471" style=
|
||
"margin-bottom:0;">
|
||
<p class="img-caption" style=
|
||
"padding-top:1.5em;margin-left:6px;line-height:1.25em;width:480px;">
|
||
You can add printing support to your apps or develop print services to
|
||
support specific types of printers.
|
||
</p>
|
||
</div>
|
||
|
||
<p>
|
||
Printer manufacturers can use new APIs to develop their own <strong>print
|
||
services</strong> — pluggable components that add vendor-specific logic
|
||
and services for communicating with specific types of printers. They can
|
||
build print services and distribute them through Google Play, making it easy
|
||
for users to find and install them on their devices. Just as with other apps,
|
||
you can update print services over-the-air at any time.
|
||
</p>
|
||
|
||
<p>
|
||
<strong>Client apps</strong> can use new APIs to add printing capabilities to
|
||
their apps with minimal code changes. In most cases, you would add a print
|
||
action to your Action Bar and a UI for choosing items to print. You would
|
||
also implement APIs to create print jobs, query the print manager for status,
|
||
and cancel jobs. This lets you print nearly any type of content, from local
|
||
images and documents to network data or a view rendered to a canvas.
|
||
</p>
|
||
|
||
<p>
|
||
For broadest compatibility, Android uses PDF as its primary file format for
|
||
printing. Before printing, your app needs to generate a properly paginated
|
||
PDF version of your content. For convenience, the printing API provides
|
||
native and WebView helper classes to let you create PDFs using standard
|
||
Android drawing APIs. If your app knows how to draw the content, it can
|
||
quickly create a PDF for printing.
|
||
</p>
|
||
|
||
<p>
|
||
Most devices running <span style="white-space:nowrap;">Android 4.4</span>
|
||
will include Google Cloud Print pre-installed as a print service, as well as
|
||
several Google apps that support printing, including Chrome, Drive, Gallery,
|
||
and QuickOffice.
|
||
</p>
|
||
|
||
<h2 id="44-storage-access">Storage access framework</h2>
|
||
|
||
<p>
|
||
A new <strong>storage access framework</strong> makes it simple for users to
|
||
browse and open documents, images, and other files across all of their their
|
||
preferred document storage providers. A standard, easy-to-use UI lets users
|
||
browse files and access recents in a consistent way across apps and
|
||
providers.
|
||
</p>
|
||
|
||
<div style="float:right;margin:22px 0px 0px 24px;width:490px;">
|
||
<img src="{@docRoot}images/kk-saf2-n5.jpg" alt="" width="240" style=
|
||
"margin-bottom:0;"> <img src="{@docRoot}images/kk-saf1-n5.jpg" alt="" width="240"
|
||
style="margin-bottom:0;padding-left:6px;">
|
||
<p class="img-caption" style=
|
||
"padding-top:1.5em;margin-left:6px;line-height:1.25em;width:480px;">
|
||
Box and others have integrated their services into the storage access
|
||
framework, giving users easy access to their documents from apps across the
|
||
system.
|
||
</p>
|
||
</div>
|
||
|
||
<p>
|
||
Cloud or local storage services can participate in this ecosystem by
|
||
implementing a new document provider class that encapsulates their services.
|
||
The provider class includes all of the APIs needed to register the provider
|
||
with the system and manage browsing, reading, and writing documents in the
|
||
provider. The document provider can give users access to any remote or local
|
||
data that can be represented as files — from text, photos, and
|
||
wallpapers to video, audio, and more.
|
||
</p>
|
||
|
||
<p>
|
||
If you build a <strong>document provider</strong> for a cloud or local
|
||
service, you can deliver it to users as part of your existing Android app.
|
||
After downloading and installing the app, users will have instant access to
|
||
your service from any app that participates in the framework. This can help
|
||
you gain exposure and user engagement, since users will find your services
|
||
more easily.
|
||
</p>
|
||
|
||
<p>
|
||
If you develop a <strong>client app</strong> that manages files or documents,
|
||
you can integrate with the storage access framework just by using new
|
||
<span style="font-size:11.5px;">CREATE_DOCUMENT</span> or <span style=
|
||
"font-size:11.5px;">OPEN_DOCUMENT</span> intents to open or create files
|
||
— the system automatically displays the standard UI for browsing
|
||
documents, including all available document providers.
|
||
</p>
|
||
|
||
<p>
|
||
You can integrate your client app one time, for all providers, without any
|
||
vendor-specific code. As users add or remove providers, they’ll continue to
|
||
have access to their preferred services from your app, without changes or
|
||
updates needed in your code.
|
||
</p>
|
||
|
||
<p>
|
||
The storage access framework is integrated with the existing <span style=
|
||
"font-size:11.5px;">GET_CONTENT</span> intent, so users also have access to
|
||
all of their previous content and data sources from the new system UI for
|
||
browsing. Apps can continue using <span style=
|
||
"font-size:11.5px;">GET_CONTENT</span> as a way to let users import data. The
|
||
storage access framework and system UI for browsing make it easier for users
|
||
to find and import their data from a wider range of sources.
|
||
</p>
|
||
<p>
|
||
Most devices running <span style="white-space:nowrap;">Android 4.4</span>
|
||
will include Google Drive and local storage pre-integrated as document
|
||
providers, and Google apps that work with files also use the new framework.
|
||
</p>
|
||
|
||
|
||
<h2 id="44-sensors">Low-power sensors</h2>
|
||
|
||
<h4 id="44-sensor-batching">Sensor batching</h4>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> introduces platform
|
||
support for <strong>hardware sensor batching</strong>, a new optimization
|
||
that can dramatically reduce power consumed by ongoing sensor activities.
|
||
</p>
|
||
|
||
<p>
|
||
With sensor batching, Android works with the device hardware to collect and
|
||
deliver sensor events efficiently in batches, rather than individually as
|
||
they are detected. This lets the device's application processor remain in a
|
||
low-power idle state until batches are delivered. You can request batched
|
||
events from any sensor using a standard event listener, and you can control
|
||
the interval at which you receive batches. You can also request immediate
|
||
delivery of events between batch cycles.
|
||
</p>
|
||
|
||
<p>
|
||
Sensor batching is ideal for low-power, long-running use-cases such as
|
||
fitness, location tracking, monitoring, and more. It can makes your app more
|
||
efficient and it lets you track sensor events continuously — even while
|
||
the screen is off and the system is asleep.
|
||
</p>
|
||
|
||
<p>
|
||
Sensor batching is currently available on Nexus 5, and we're working with our
|
||
chipset partners to bring it to more devices as soon as possible.
|
||
</p>
|
||
|
||
<div style="float:right;margin:1em 0em 0em 3em;width:490px;clear:both">
|
||
<img src="{@docRoot}images/kk-sensors-moves-n5.jpg" alt="" width="240" style=
|
||
"margin-bottom:0;"> <img src="{@docRoot}images/kk-sensors-runtastic-n5.jpg" alt=""
|
||
width="240" style="margin-bottom:0;padding-left:4px;">
|
||
<p class="img-caption" style=
|
||
"padding-top:1.5em;margin-left:6px;line-height:1.25em;">
|
||
<strong>Moves</strong> and <strong>Runtastic Pedometer</strong> are using
|
||
the hardware step-detector to offer long-running, low-power services.
|
||
</p>
|
||
</div>
|
||
|
||
<h4 id="44-step-detector">Step Detector and Step Counter</h4>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> also adds platform
|
||
support for two new composite sensors — step detector
|
||
and step counter — that let your app track steps when
|
||
the user is walking, running, or climbing stairs. These new sensors are
|
||
implemented in hardware for low power consumption.
|
||
</p>
|
||
|
||
<p>
|
||
The step detector analyzes accelerometer input to recognize when the user has
|
||
taken a step, then triggers an event with each step. The step counter tracks
|
||
the total number of steps since the last device reboot and triggers an event
|
||
with each change in the step count. Because the logic and sensor management
|
||
is built into the platform and underlying hardware, you don't need to
|
||
maintain your own detection algorithms in your app.
|
||
</p>
|
||
|
||
<p>
|
||
Step detector and counter sensors are available on Nexus 5, and we're working
|
||
with our chipset partners to bring them to new devices as soon as possible.
|
||
</p>
|
||
|
||
|
||
<h2 id="44-sms-provider">SMS provider</h2>
|
||
|
||
<p>
|
||
If you develop a messaging app that uses SMS or MMS, you can now use a
|
||
<strong>shared SMS provider and new APIs</strong> to manage your app's
|
||
message storage and retrieval. The new SMS provider and APIs define a
|
||
standardized interaction model for all apps that handle SMS or MMS messages.
|
||
</p>
|
||
|
||
<p>
|
||
Along with the new provider and APIs, <span style=
|
||
"white-space:nowrap;">Android 4.4</span> introduces <strong>new
|
||
semantics</strong> for receiving messages and writing to the provider. When a
|
||
message is received, the system routes it directly to the user's default
|
||
messaging app using the new <span style=
|
||
"font-size:11.5px;">SMS_DELIVER</span> intent. Other apps can still listen
|
||
for incoming messages using the <span style=
|
||
"font-size:11.5px;">SMS_RECEIVED</span> intent. Also, the system now allows
|
||
only the default app to write message data to the provider, although other
|
||
apps can read at any time. Apps that are not the user's default can still
|
||
send messages — the system handles writing those messages to the
|
||
provider on behalf of the app, so that users can see them in the default app.
|
||
</p>
|
||
|
||
<p>
|
||
The new provider and semantics help to improve the user's experience when
|
||
multiple messaging apps are installed, and they help you to build new
|
||
messaging features with fully-supported, forward-compatible APIs.
|
||
</p>
|
||
|
||
|
||
<h2 id="44-beautiful-apps">New ways to build beautiful apps</h2>
|
||
|
||
<div style="float:right;margin:14px 0px 0px 24px;width:246px;">
|
||
<img src="{@docRoot}images/kk-immersive-n5.jpg" alt="" width="240" style=
|
||
"margin-bottom:0;">
|
||
<p class="img-caption" style=
|
||
"padding-top:1.5em;margin-left:6px;line-height:1.25em;">
|
||
A new <strong>immersive mode</strong> lets apps use every pixel on the
|
||
screen to show content and capture touch events.
|
||
</p>
|
||
</div>
|
||
|
||
<h4 id="44-immersive">Full-screen Immersive mode</h4>
|
||
<p>
|
||
Now your apps can use <strong>every pixel on the device screen</strong> to
|
||
showcase your content and capture touch events. <span style=
|
||
"white-space:nowrap;">Android 4.4</span> adds a new full-screen immersive
|
||
mode that lets you create full-bleed UIs reaching from edge to edge on phones
|
||
and tablets, <strong>hiding all system UI</strong> such as the status bar and
|
||
navigation bar. It's ideal for rich visual content such as photos, videos,
|
||
maps, books, and games.
|
||
</p>
|
||
|
||
<p>
|
||
In the new mode, the system UI stays hidden, even while users are interacting
|
||
with your app or game — you can capture touch events from anywhere
|
||
across the screen, even areas that would otherwise be occupied by the system
|
||
bars. This gives you a great way to create a larger, richer, more immersive
|
||
UI in your app or game and also reduce visual distraction.
|
||
</p>
|
||
|
||
<p>
|
||
To make sure that users always have easy, consistent access to system UI from
|
||
full-screen immersive mode, <span style="white-space:nowrap;">Android
|
||
4.4</span> supports a new gesture — in immersive mode, an edge swipe
|
||
from the top or bottom of the screen now reveals the system UI.
|
||
</p>
|
||
|
||
<p>
|
||
To return to immersive mode, users can touch the screen outside of the bar
|
||
bounds or wait for a short period for the bars to auto-hide. For a consistent
|
||
user experience, the new gesture also works with previous methods of hiding
|
||
the status bar.
|
||
</p>
|
||
|
||
<h4 id="44-transitions">Transitions framework for animating scenes</h4>
|
||
|
||
<p>
|
||
Most apps structure their flows around several key UI states that expose
|
||
different actions. Many apps also use animation to help users understand
|
||
their progress through those states and the actions available in each. To
|
||
make it easier to create <strong>high-quality animations</strong> in your
|
||
app, <span style="white-space:nowrap;">Android 4.4</span> introduces a new
|
||
transitions framework.
|
||
</p>
|
||
|
||
<p>
|
||
The transitions framework lets you define <strong>scenes</strong>, typically
|
||
view hierarchies, and transitions, which describe how to animate or transform
|
||
the scenes when the user enters or exits them. You can use several predefined
|
||
transition types to animate your scenes based on specific properties, such as
|
||
layout bounds, or visibility. There's also an auto-transition type that
|
||
automatically fades, moves, and resizes views during a scene change. In
|
||
addition, you can define custom transitions that animate the properties that
|
||
matter most to your app, and you can plug in your own animation styles if
|
||
needed.
|
||
</p>
|
||
|
||
<p>
|
||
With the transitions framework you can also <strong>animate changes to your
|
||
UI on the fly</strong>, without needing to define scenes. For example, you
|
||
can make a series of changes to a view hierarchy and then have the
|
||
TransitionManager automatically run a delayed transition on those changes.
|
||
</p>
|
||
|
||
<p>
|
||
Once you've set up transitions, it's straightforward to invoke them from your
|
||
app. For example, you can call a single method to begin a transition, make
|
||
various changes in your view hierarchy, and on the next frame animations will
|
||
automatically begin that animate the changes you specified.
|
||
</p>
|
||
|
||
<div style="float:right;margin:0px 0px 22px 32px;width:340px;">
|
||
<img src="{@docRoot}images/kk-home.jpg" alt="translucent system UI" widtdh="340"
|
||
style="margin-bottom:0">
|
||
<p class="img-caption" style=
|
||
"padding-top:1.5em;line-height:1.25em;margin-bottom:0;">
|
||
Apps can use new window styles to request translucent system bars.
|
||
</p>
|
||
</div>
|
||
|
||
<p>
|
||
For custom control over the transitions that run between specific scenes in
|
||
your application flow, you can use the TransitionManager. The
|
||
TransitionManager lets you define the relationship between scenes and the
|
||
transitions that run for specific scene changes.
|
||
</p>
|
||
|
||
<h4 id="44-translucent-system-ui">Translucent system UI styling</h4>
|
||
|
||
<p>
|
||
To get the most impact out of your content, you can now use new window styles
|
||
and themes to request <strong>translucent system UI</strong>, including both
|
||
the status bar and navigation bar. To ensure the legibility of navigation bar
|
||
buttons or status bar information, subtle gradients is shown behind the
|
||
system bars. A typical use-case would be an app that needs to show through to
|
||
a wallpaper.
|
||
</p>
|
||
|
||
<h4 id="44-notification-access">Enhanced notification access</h4>
|
||
|
||
<p>
|
||
Notification listener services can now see <strong>more information about
|
||
incoming notifications</strong> that were constructed using the notification
|
||
builder APIs. Listener services can access a notification's actions as well
|
||
as new extras fields — text, icon, picture, progress, chronometer, and
|
||
many others — to extract cleaner information about the notification and
|
||
present the information in a different way.
|
||
</p>
|
||
|
||
<div style="float:left;margin:1em 2em 1em 2em;">
|
||
<a href=""><img src="{@docRoot}images/kk-chromium-icon.png" alt="" height="160" style=
|
||
"margin-bottom:0em;"></a>
|
||
</div>
|
||
|
||
<h4 id="44-webview">Chromium WebView</h4>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> includes a completely
|
||
new implementation of WebView that's based on <a href=
|
||
"http://www.chromium.org/Home" class="external-link">Chromium</a>. The new
|
||
Chromium WebView gives you the latest in standards support, performance, and
|
||
compatibility to build and display your web-based content.
|
||
</p>
|
||
|
||
<p>
|
||
Chromium WebView provides broad support for HTML5, CSS3, and JavaScript. It
|
||
supports most of the HTML5 features available in Chrome for Android 30. It
|
||
also brings an updated version of the JavaScript Engine (V8) that delivers
|
||
dramatically improved JavaScript performance.
|
||
</p>
|
||
|
||
<p stydle="clear:both;">
|
||
In addition, the new Chromium WebView supports remote debugging using
|
||
<a class="external-link" href=
|
||
"https://developers.google.com/chrome-developer-tools/docs/remote-debugging#debugging-webviews">
|
||
Chrome DevTools</a>. For example, you can use Chrome DevTools on your
|
||
development machine to inspect, debug, and analyze your WebView content live
|
||
on a mobile device.
|
||
</p>
|
||
|
||
<p>
|
||
The new Chromium WebView is included on all compatible devices running
|
||
<span style="white-space:nowrap;">Android 4.4</span> and higher. You can take
|
||
advantage of the new WebView right away, and with minimum modifications to
|
||
existing apps and content. In most cases, your content will migrate to the
|
||
new implementation seamlessly.
|
||
</p>
|
||
|
||
|
||
<h2 id="44-media">New media capabilities</h2>
|
||
|
||
<h4 id="44-screen-recording">Screen recording</h4>
|
||
|
||
<p>
|
||
Now it's easy to create high-quality video of your app, directly from your
|
||
Android device. <span style="white-space:nowrap;">Android 4.4</span> adds
|
||
support for screen recording and provides a <strong>screen recording
|
||
utility</strong> that lets you start and stop recording on a device that's
|
||
connected to your Android SDK environment over USB. It's a great new way to
|
||
create walkthroughs and tutorials for your app, testing materials, marketing
|
||
videos, and more.
|
||
</p>
|
||
|
||
<p>
|
||
With the screen recording utility, you can capture video of your device screen
|
||
contents and store the video as an MP4 file on the device. You can record at any
|
||
device-supported resolution and bitrate you want, and the output retains the
|
||
aspect ratio of the display. By default, the utility selects a resolution
|
||
equal or close to the device's display resolution in the current orientation.
|
||
When you are done recording, you can share the video directly from your
|
||
device or pull the MP4 file to your host computer for post-production.
|
||
</p>
|
||
|
||
<p>
|
||
If your app plays video or other protected content that you don’t want to be
|
||
captured by the screen recorder, you can use <span style=
|
||
"font-size:11.5px;font-family:monospace;white-space:nowrap;">SurfaceView.setSecure()</span>
|
||
to mark the content as secure.
|
||
</p>
|
||
|
||
<p>
|
||
You can access screen recording through the adb tool included in the Android
|
||
SDK, using the command <span style=
|
||
"font-size:11.5px;font-family:monospace;white-space:nowrap;">adb shell
|
||
screenrecord</span>. You can also launch it through the DDMS panel in Android
|
||
Studio.
|
||
</p>
|
||
|
||
<h4 id="44-adaptive-playback">Resolution switching through adaptive playback</h4>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> brings formal support
|
||
for adaptive playback into the Android media framework. Adaptive playback is
|
||
an optional feature of video decoders for MPEG-DASH and other formats that
|
||
enables <strong>seamless change in resolution during playback</strong>. The
|
||
client can start to feed the decoder input video frames of a new resolution
|
||
and the resolution of the output buffers change automatically, and without a
|
||
significant gap.
|
||
</p>
|
||
|
||
<p>
|
||
Resolution switching in <span style="white-space:nowrap;">Android 4.4</span>
|
||
lets media apps offer a significantly better streaming video experience. Apps
|
||
can check for adaptive playback support at runtime using existing APIs and
|
||
implement resolution-switching using new APIs introduced in <span style=
|
||
"white-space:nowrap;">Android 4.4</span>.
|
||
</p>
|
||
|
||
<h4 id="44-cenc">Common Encryption for DASH</h4>
|
||
|
||
<p>
|
||
Android now supports the <strong>Common Encryption (CENC)</strong> for
|
||
MPEG-DASH, providing a standard, multiplatform DRM scheme for managing
|
||
protecting content. Apps can take advantage of CENC through Android's modular
|
||
DRM framework and platform APIs for supporting DASH.
|
||
</p>
|
||
|
||
<h4 id="44-hls">HTTP Live Streaming</h4>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> updates the platform's
|
||
HTTP Live Streaming (HLS) support to a superset of version 7 of the HLS
|
||
specification (version 4 of the protocol). See the <a href=
|
||
"http://tools.ietf.org/html/draft-pantos-http-live-streaming-07" class=
|
||
"external-link">IETF draft</a> for details.
|
||
</p>
|
||
<h4 id="44-audio-tunneling">Audio Tunneling to DSP</h4>
|
||
|
||
<p>
|
||
For high-performance, lower-power audio playback, <span style=
|
||
"white-space:nowrap;">Android 4.4</span> adds platform support for
|
||
audio tunneling to a digital signal processor (DSP) in the
|
||
device chipset. With tunneling, audio decoding and output effects are
|
||
off-loaded to the DSP, waking the application processor less often and using
|
||
less battery.
|
||
</p>
|
||
|
||
<p>
|
||
Audio tunneling can <strong>dramatically improve battery life</strong> for
|
||
use-cases such as listening to music over a headset with the screen off. For
|
||
example, with audio tunneling, Nexus 5 offers a total off-network audio
|
||
playback time of up to 60 hours, an increase of over 50% over non-tunneled
|
||
audio.
|
||
</p>
|
||
|
||
<p>
|
||
Media applications can take advantage of audio tunneling on supported devices
|
||
without needing to modify code. The system applies tunneling to optimize
|
||
audio playback whenever it's available on the device.
|
||
</p>
|
||
|
||
<div style="float:right;padding-top:1em;width:372px;margin-left:2em;">
|
||
<img src="{@docRoot}images/kk-loudnessEnhancerAnnotated.png" alt=
|
||
"Visualizer showing loudness enhancer audio effect" width="360" height="252"
|
||
style="border:1px solid #ddd;border-radius: 6px;">
|
||
<p class="img-caption" style="margin-left:6px;line-height:1.25em;">
|
||
Visualization of how the LoudnessEnhancer effect can make speech content
|
||
more audible.
|
||
</p>
|
||
</div>
|
||
|
||
<p>
|
||
Audio tunneling requires support in the device hardware. Currently audio
|
||
tunneling is available on Nexus 5 and we're working with our chipset partners
|
||
to make it available on more devices as soon as possible.
|
||
</p>
|
||
|
||
<h4 id="44-audio-monitoring">Audio monitoring</h4>
|
||
|
||
<p>
|
||
Apps can use new monitoring tools in the Visualizer effect to get updates on
|
||
the <strong>peak and RMS levels</strong> of any currently playing audio on
|
||
the device. For example, you could use this creatively in music visualizers
|
||
or to implement playback metering in a media player.
|
||
</p>
|
||
|
||
<h4 id="44-loudness">Loudness enhancer</h4>
|
||
|
||
<p>
|
||
Media playback applications can <strong>increase the loudness of spoken
|
||
content</strong> by using the new LoudnessEnhancer effect, which acts as
|
||
compressor with time constants that are specifically tuned for speech.
|
||
</p>
|
||
|
||
<h4 id="44-audio-timestamps">Audio timestamps for improved AV sync</h4>
|
||
|
||
<p>
|
||
The audio framework can now report <strong>presentation timestamps</strong>
|
||
from the audio output HAL to applications, for better audio-video
|
||
synchronization. Audio timestamps let your app determine when a specific
|
||
audio frame will be (or was) presented off-device to the user; you can use
|
||
the timestamp information to more accurately synchronize audio with video
|
||
frames.
|
||
</p>
|
||
|
||
<h4 id="44-miracast">Wi-Fi CERTIFIED Miracast™</h4>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> devices can now be
|
||
certified to the Wi-Fi Alliance Wi-Fi Display Specification as Miracast
|
||
compatible. To help with testing, a new Wireless Display developer option
|
||
exposes advanced configuration controls and settings for Wireless Display
|
||
certification. You can access the option at <strong>Settings > Developer
|
||
options > Wireless display certification</strong>. Nexus 5 is a Miracast
|
||
certified wireless display device.
|
||
</p>
|
||
|
||
<h2 id="44-renderscript">RenderScript Compute</h2>
|
||
|
||
<div style="float:right;padding-top:1em;width:372px;margin-left:2em;">
|
||
<img src="{@docRoot}images/kk-rs-chart-versions.png" alt=
|
||
"Renderscipt optimizations chart" width="360" height="252" style=
|
||
"border:1px solid #ddd;border-radius: 6px;">
|
||
<p class="img-caption" style="margin-left:6px;line-height:1.25em;">
|
||
Performance benchmarks for Android 4.4 relative to Android 4.3,
|
||
run on the same devices (Nexus 7, Nexus 10).
|
||
</p>
|
||
</div>
|
||
|
||
<h4>Ongoing performance improvements</strong></h4>
|
||
|
||
<p>
|
||
When your apps use RenderScript, they'll benefit from <strong>ongoing
|
||
performance tuning</strong> in the RenderScript runtime itself, without the
|
||
need for recompilation. The chart at right shows performance gains in Android
|
||
4.4 on two popular chipsets.
|
||
</p>
|
||
|
||
<h4>GPU acceleration</h4>
|
||
|
||
<p>
|
||
Any app using RenderScript on a supported device benefits from GPU
|
||
acceleration, without code changes or recompiling. Since the Nexus 10 first
|
||
debuted RenderScript GPU acceleration, various other hardware partners have
|
||
added support.
|
||
</p>
|
||
|
||
<p>
|
||
Now with <span style="white-space:nowrap;">Android 4.4</span>, GPU
|
||
acceleration is available on the Nexus 5, as well as the Nexus 4, Nexus 7
|
||
(2013), and Nexus 10, and we're working with our partners to bring it to more
|
||
devices as soon as possible.
|
||
</p>
|
||
|
||
<h4 id="44-renderscript-ndk">RenderScript in the Android NDK</h4>
|
||
|
||
<p>
|
||
Now you can take advantage of RenderScript <strong>directly from your native
|
||
code</strong>. A new C++ API in the Android Native Development Kit (NDK) lets
|
||
you access the same RenderScript functionality available through the
|
||
framework APIs, including script intrinsics, custom kernels, and more.
|
||
</p>
|
||
|
||
<p>
|
||
If you have large, performance-intensive tasks to handle in native code, you
|
||
can perform those tasks using RenderScript and integrate them with your
|
||
native code. RenderScript offers great performance across a wide range of
|
||
devices, with automatic support for multi-core CPUs, GPUs, and other
|
||
processors.
|
||
</p>
|
||
|
||
<p>
|
||
When you build an app that uses the RenderScript through the NDK, you can
|
||
distribute it to any device running Android 2.2 or or higher, just like with
|
||
the RenderScript support library available for framework APIs.
|
||
</p>
|
||
|
||
|
||
<h2 id="44-graphics">Graphics</h2>
|
||
|
||
<h4 id="44-surfaceflinger">GLES2.0 SurfaceFlinger</h4>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> upgrades its
|
||
SurfaceFlinger from OpenGL ES 1.0 to OpenGL ES 2.0.
|
||
</p>
|
||
|
||
<h4 id="44-composer">New Hardware Composer support for virtual displays</h4>
|
||
|
||
<p>
|
||
The latest version of Android Hardware Composer, HWComposer 1.3, supports
|
||
hardware composition of one virtual display in addition to the primary,
|
||
external (e.g. HDMI) display, and has improved OpenGL ES interoperability.
|
||
</p>
|
||
|
||
|
||
<h2 id="44-connectivity">New Types of Connectivity</h2>
|
||
|
||
<h4 id="44-bluetooth">New Bluetooth profiles</h4>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> support for two new
|
||
Bluetooth profiles to let apps support a broader range of low-power and media
|
||
interactions. <strong>Bluetooth HID over GATT</strong> (HOGP) gives apps a
|
||
low-latency link with low-power peripheral devices such as mice, joysticks,
|
||
and keyboards. <strong>Bluetooth MAP</strong> lets your apps exchange
|
||
messages with a nearby device, for example an automotive terminal for
|
||
handsfree use or another mobile device. As an <strong>extension to Bluetooth
|
||
AVRCP 1.3</strong>, users can now set absolute volume on the system from
|
||
their Bluetooth devices.
|
||
</p>
|
||
|
||
<p>
|
||
Platform support for HOGP, MAP, and AVRCP is built on the Bluedroid Bluetooth
|
||
stack introduced by Google and Broadcom in Android 4.2. Support is available
|
||
right away on Nexus devices and other Android-compatible devices that offer
|
||
compatible Bluetooth capabilities.
|
||
</p>
|
||
|
||
<h4 id="44-ir-blasters">IR Blasters</h4>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> introduces platform
|
||
support for built-in <strong>IR blasters</strong>, along with a new API and
|
||
system service that let you create apps to take advantage them.
|
||
</p>
|
||
|
||
<p>
|
||
Using the new API, you can build apps that let users remotely control nearby
|
||
TVs, tuners, switches, and other electronic devices. The API lets your app
|
||
check whether the phone or tablet has an infrared emitter, query it's carrier
|
||
frequencies, and then send infrared signals.
|
||
</p>
|
||
|
||
<p>
|
||
Because the API is standard across Android devices running <span style=
|
||
"white-space:nowrap;">Android 4.4</span> or higher, your app can support the
|
||
broadest possible range of vendors without writing custom integration code.
|
||
</p>
|
||
|
||
<h4 id="44-wifi-tdls">Wi-Fi TDLS support</h4>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> introduces a seamless
|
||
way to stream media and other data faster between devices already on the same
|
||
Wi-Fi network by supporting Wi-Fi Tunneled Direct Link Setup (TDLS).
|
||
</p>
|
||
|
||
|
||
<h2 id="44-accessibility">Accessibility</h2>
|
||
|
||
<h4 id="44-closed-captioning">System-wide settings for closed captioning</h4>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> now supports a better
|
||
accessibility experience across apps by adding system-wide preferences for
|
||
Closed Captioning. Users can go to <strong>Settings</strong> >
|
||
<strong>Accessibility</strong> > <strong>Captions</strong> to set global
|
||
captioning preferences, such as whether to show captions and what language,
|
||
text size, and text style to use.
|
||
</p>
|
||
|
||
<p>
|
||
Apps that use video can now access the user's captioning settings and
|
||
<strong>adjust presentation to meet the user's preferences</strong>. A new
|
||
captioning manager API lets you check and monitor the user's captioning
|
||
preferences. The captioning manager provides you with the user's preferred
|
||
captioning state as well as preferred locale, scaling factor, and text style.
|
||
The text style includes foreground and background colors, edge properties,
|
||
and typeface.
|
||
</p>
|
||
|
||
<div style="float:right;margin:22px 0px 0px 24px;width:490px;">
|
||
<img src="{@docRoot}images/kk-captions-n5.jpg" alt="" width="471" style=
|
||
"margin-bottom:0;">
|
||
<p class="img-caption" style=
|
||
"padding-top:1.5em;margin-left:6px;line-height:1.25em;width:480px;">
|
||
Apps can now refer to the user's <strong>system-wide captions
|
||
preferences</strong>. An example of the expected display style is shown
|
||
right in the settings.
|
||
</p>
|
||
</div>
|
||
|
||
<p>
|
||
In addition, apps that use <strong>VideoView</strong> can use a new API to
|
||
pass a captioning stream along with a video stream for rendering. The system
|
||
automatically handles the display of the captions on video frames according
|
||
to the user's systemwide settings. Currently, VideoView supports auto-display
|
||
of captions in WebVTT format only.
|
||
</p>
|
||
|
||
<p>
|
||
<strong>All apps that show captions</strong> should make sure to check the
|
||
user's systemwide captioning preferences and render captions as closely as
|
||
possible to those preferences. For more insight into how specific
|
||
combinations of settings should look, you can look at a preview of captions
|
||
in different languages, sizes, and styles right in the Settings app.
|
||
</p>
|
||
|
||
<h4 id="44-enhanced-apis">Enhanced Accessibility APIs</h4>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> extends the
|
||
accessibility APIs to support <strong>more precise structural and semantic
|
||
description</strong> and observation of onscreen elements. With the new APIs,
|
||
developers can improve the quality of accessible feedback by providing
|
||
accessibility services with more information about on-screen elements.
|
||
</p>
|
||
|
||
<p>
|
||
In accessibility nodes, developers can now determine whether a node is a
|
||
popup, get its input type, and more. You can also use new APIs to work with
|
||
nodes that contain grid-like information, such as lists and tables. For
|
||
example, you can now specify new supported actions, collection information,
|
||
live region modes, and more.
|
||
</p>
|
||
|
||
<p>
|
||
New accessibility events let developers more closely follow the changes that
|
||
are taking place in window content, and they can now listen for changes in
|
||
the touch exploration mode on the device.
|
||
</p>
|
||
|
||
|
||
<h2 id="44-international-users">Support for international Users</h2>
|
||
|
||
<h4 id="44-drawable-mirroring">Drawable mirroring for RTL locales</h4>
|
||
|
||
<p>
|
||
If your app is targeting users who use RTL scripts, you can use a new API to
|
||
declare that a <strong>drawable should be auto-mirrored</strong> when the
|
||
user's locale setting includes an RTL language.
|
||
</p>
|
||
|
||
<p>
|
||
Declaring a drawable as auto-mirrored helps you <strong>prevent duplication
|
||
of assets</strong> in your app and reduces the the size of your APK. When you
|
||
have drawables that are the reusable for both LTR and RTL presentations, you
|
||
can declare the default versions as auto-mirrored and then omit those
|
||
Drawables from your RTL resources.
|
||
</p>
|
||
|
||
<div style="float:right;margin:16px 12px 0px 32px;width:260px;clear:both;">
|
||
<img src="{@docRoot}images/kk-pseudolocale-rtl.png" alt="" width="260" style=
|
||
"margin-bottom:0;">
|
||
<p class="img-caption" style="padding-top:1.5em;line-height:1.25em;">
|
||
The <strong>Force RTL layout</strong> option makes it easier to test your app's localization.
|
||
</p>
|
||
</div>
|
||
|
||
<p>
|
||
You can declare various types of drawables as auto-mirrored in your
|
||
application code, such as bitmap, nine-patch, layer, state list, and other
|
||
drawables. You can also declare a drawable as auto-mirrored in your resource
|
||
files by using a new attribute.
|
||
</p>
|
||
|
||
<h4 id="44-pseudolocale-rtl">Force RTL Layout</h4>
|
||
|
||
<p>
|
||
To make it easier to test and debug layout mirroring issues without switching
|
||
to an RTL language, Android includes a new developer option to force RTL layout
|
||
direction in all apps.
|
||
</p>
|
||
|
||
<p>
|
||
The Force RTL layout option switches the device to RTL layout for all locales and
|
||
displays text in your current language. This can help you find layout issues
|
||
across your app, without having to display the app in an RTL language. You
|
||
can access the option in <strong>Settings > Developer
|
||
options > Force RTL layout direction</strong>.
|
||
</p>
|
||
|
||
|
||
<h2 id="44-security">Security enhancements</h2>
|
||
|
||
<h4 id="44-selinux">SELinux (enforcing mode)</h4>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> updates its SELinux
|
||
configuration from "permissive" to "enforcing." This means potential policy
|
||
violations within a SELinux domain that has an enforcing policy will be
|
||
blocked.
|
||
</p>
|
||
|
||
<h4 id="44-crytpo">Improved cryptographic algorithms</h4>
|
||
|
||
<p>
|
||
Android has improved its security further by adding support for two more
|
||
cryptographic algorithms. Elliptic Curve Digital Signature Algorithm (ECDSA)
|
||
support has been added to the keystore provider improving security of digital
|
||
signing, applicable to scenarios such as signing of an application or a data
|
||
connection. The Scrypt key derivation function is implemented to protect the
|
||
cryptographic keys used for full-disk encryption.
|
||
</p>
|
||
|
||
<h4 id="44-other">Other enhancements</h4>
|
||
|
||
<p>
|
||
On multiuser devices, VPNs are now applied per user. This can allow a user to
|
||
route all network traffic through a VPN without affecting other users on the
|
||
device. Also, Android now supports FORTIFY_SOURCE level 2, and all code is
|
||
compiled with those protections. FORTIFY_SOURCE has been enhanced to work
|
||
with clang.
|
||
</p>
|
||
|
||
|
||
<h2 id="44-tools">Tools for analyzing memory use</h2>
|
||
|
||
<h4 id="44-procstats">Procstats</h4>
|
||
|
||
<p>
|
||
A new tool called <strong>procstats</strong> helps you analyze the memory
|
||
resources your app uses, as well as the resources used by other apps and
|
||
services running on the system.
|
||
</p>
|
||
|
||
<p>
|
||
Procstats keeps track of <strong>how apps are running over time</strong>,
|
||
providing data about their execution durations and memory use to help
|
||
determine how efficiently they are performing. This is most important for
|
||
apps that start services that run in the background, since it lets you
|
||
monitor how long they are running and how much RAM they are using while doing
|
||
so. Procstats will also collect data for foreground applications about memory
|
||
use over time to determine the overall memory profile of the app.
|
||
</p>
|
||
|
||
<p>
|
||
Procstats can help you identify background services started by your app. You
|
||
can keep track of how long those services continue running and how much RAM
|
||
they use while doing so. Procstats also lets you profile your app while it's
|
||
in the foreground, using its memory use over time to determine its overall
|
||
memory profile.
|
||
</p>
|
||
|
||
<div style="margin:2em 0em;width:780px;">
|
||
<div style="float:left;width:390px;">
|
||
<img src="{@docRoot}images/kk-procstats.png" alt="" width="360" style=
|
||
"margin-bottom:0;box-shadow: 3px 10px 18px 1px #eee;border:1px solid #ddd;border-radius: 6px;">
|
||
<p class="img-caption" style=
|
||
"padding-top:1.5em;line-height:1.25em;width:360px;">
|
||
The new <strong>procstats</strong> tool lets you check the memory use of
|
||
apps and services over time.
|
||
</p>
|
||
</div>
|
||
|
||
<div style="float:right;width:390px;">
|
||
<img src="{@docRoot}images/kk-meminfo.png" alt="" width="360" style=
|
||
"margin-bottom:0;box-shadow: 3px 10px 12px 1px #eee;border:1px solid #ddd;border-radius: 6px;">
|
||
<p class="img-caption" style=
|
||
"padding-top:1.5em;line-height:1.25em;width:360px;">
|
||
The enhanced <strong>meminfo</strong> tool lets you see details of memory
|
||
use for an app.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<p style="clear:both;">
|
||
You can access procstats from the adb tool included in the Android SDK,
|
||
<span style="font-size:11.5px;font-family:monospace;white-space:nowrap;">adb
|
||
shell dumpsys procstats</span>. Also, for on-device profiling, see the
|
||
Process Stats developer option, below.
|
||
</p>
|
||
|
||
|
||
<h4 id="44-procstats-ondevice" style="clear:both">On-device memory status and profiling</h4>
|
||
|
||
<p>
|
||
<span style="white-space:nowrap;">Android 4.4</span> includes a new developer
|
||
option to make it easier to analyze your app's memory profile while it's
|
||
running on any device or emulator. It's especially useful to get a view of
|
||
how your app uses memory and performs on devices with low RAM. You can access
|
||
the option at <strong>Settings > Developer options > Process
|
||
stats</strong>
|
||
</p>
|
||
|
||
<div style="float:right;margin:22px 0px 0px 24px;width:490px;">
|
||
<img src="{@docRoot}images/kk-proc-device-overview-n5.jpg" alt="" width="240" style=
|
||
"margin-bottom:0;"> <img src="{@docRoot}images/kk-proc-device-detail-n5.jpg" alt=""
|
||
width="240" style="margin-bottom:0;padding-left:6px;">
|
||
<p class="img-caption" style=
|
||
"padding-top:1.5em;margin-left:6px;line-height:1.25em;width:480px;">
|
||
<strong>Process stats</strong> is a convenient way to check your app's
|
||
memory use. You can see how your app compares to other apps and zoom in on
|
||
specific data about your app or it's background services.
|
||
</p>
|
||
</div>
|
||
|
||
<p>
|
||
The <strong>Process Stats</strong> option shows you a variety of high-level
|
||
metrics on your app's memory use, based on data collected using the new
|
||
procstats service. On the main screen you can see a summary of system memory
|
||
status. Green indicates relative amount of time spent with low RAM usage,
|
||
yellow indicates moderate RAM usage, and red indicates high (critical) RAM
|
||
usage
|
||
</p>
|
||
|
||
<p>
|
||
Below the summary is a list summarizing each app's <strong>memory load on the
|
||
system</strong>. For each app, a blue bar indicates the relative computed
|
||
memory load (runtime x avg_pss) of its process, and a percentage number
|
||
indicates the relative amount of time spent in the background. You can filter
|
||
the list to show only foreground, background, or cached processes, and you
|
||
can include or exclude system processes. You can also change the duration of
|
||
the data collected to 3, 6, 12, or 24 hours, and you can include or exclude
|
||
uss memory.
|
||
</p>
|
||
|
||
<p>
|
||
To take a closer look at a specific app's memory usage in isolation, tap the
|
||
app. For each app, you can now see a summary of the memory consumed and the
|
||
percentage of the collection interval that the app has been running. You can
|
||
also see the average and maximum usage over the collection period, and below
|
||
the app's services and the percentage of time they've been running.
|
||
</p>
|
||
|
||
<p>
|
||
Analyzing your app using the data in Process Stats can reveal issues and
|
||
suggest possible optimizations for your app. For example, if your app is
|
||
running longer than it should or using too much memory over a period of time,
|
||
there could be bugs in your code that you can resolve to improve your app's
|
||
performance, especially when running on a device with low RAM.
|
||
</p>
|
||
|
||
</div><!-- END ANDROID 4.4 -->
|