summaryrefslogtreecommitdiffstats
path: root/docs/html/guide/basics
diff options
context:
space:
mode:
Diffstat (limited to 'docs/html/guide/basics')
-rw-r--r--docs/html/guide/basics/appmodel.jd261
-rw-r--r--docs/html/guide/basics/building-blocks.jd76
-rw-r--r--docs/html/guide/basics/fixme-gs-core-packages.jd92
-rw-r--r--docs/html/guide/basics/index.html8
-rw-r--r--docs/html/guide/basics/what-is-android.jd135
5 files changed, 572 insertions, 0 deletions
diff --git a/docs/html/guide/basics/appmodel.jd b/docs/html/guide/basics/appmodel.jd
new file mode 100644
index 0000000..323fc9b
--- /dev/null
+++ b/docs/html/guide/basics/appmodel.jd
@@ -0,0 +1,261 @@
+page.title=Application Model
+@jd:body
+<h1>Android Application Model: Applications, Tasks, Processes, and Threads</h1>
+
+<p>In most operating systems, there is a strong 1-to-1 correlation between
+the executable image (such as the .exe on Windows) that an application lives in,
+the process it runs in, and the icon and application the user interacts with.
+In Android these associations are much more fluid, and it is important to
+understand how the various pieces can be put together.</p>
+
+<p>Because of the flexible nature of Android applications, there is some
+basic terminology that needs to be understood when implementing the
+various pieces of an application:</p>
+
+<ul>
+<li><p>An <strong>android package</strong> (or <strong>.apk</strong> for short)
+is the file containing an application's code and its resources. This is the
+file that an application is distributed in and downloaded by the user when
+installing that application on their device.</p></li>
+
+<li><p>A <strong>task</strong> is generally what the user perceives as
+an "application" that can be launched: usually a task has an icon in the
+home screen through which it is accessed, and it is available as a top-level
+item that can be brought to the foreground in front of other
+tasks.</p></li>
+
+<li><p>A <strong>process</strong> is a low-level kernel process in which
+an application's code is running. Normally all of the code in a
+.apk is run in one, dedicated process for that .apk; however, the
+{@link android.R.styleable#AndroidManifestApplication_process process} tag
+can be used to modify where that code is run, either for
+{@link android.R.styleable#AndroidManifestApplication the entire .apk}
+or for individual
+{@link android.R.styleable#AndroidManifestActivity activity},
+{@link android.R.styleable#AndroidManifestReceiver receiver},
+{@link android.R.styleable#AndroidManifestService service}, or
+{@link android.R.styleable#AndroidManifestProvider provider}, components.</p></li>
+</ul>
+
+<h2 id="Tasks">Tasks</h2>
+
+<p>A key point here is: <em>when the user sees as an "application," what
+they are actually dealing with is a task</em>. If you just create a .apk
+with a number of activities, one of which is a top-level entry point (via
+an {@link android.R.styleable#AndroidManifestIntentFilter intent-filter} for
+the action <code>android.intent.action.MAIN</code> and
+category <code>android.intent.category.LAUNCHER</code>), then there will indeed
+be one task created for your .apk, and any activities you start from there
+will also run as part of that task.</p>
+
+<p>A task, then, from the user's perspective your application; and from the
+application developer's perspective it is one or more activities the user
+has traversed through in that task and not yet closed, or an activity stack.
+A new task is created by
+starting an activity Intent with the {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK
+Intent.FLAG_ACTIVITY_NEW_TASK} flag; this Intent will be used as the root Intent of
+the task, defining what task it is. Any activity started without this flag
+will run in the same task as the activity that is starting it (unless that
+activity has requested a special launch mode, as discussed later). Tasks can
+be re-ordered: if you use FLAG_ACTIVITY_NEW_TASK but there is already a task
+running for that Intent, the current task's activity stack will be brought
+to the foreground instead of starting a new task.</p>
+
+<p>FLAG_ACTIVITY_NEW_TASK must only be used with care: using it says that,
+from the user's perspective, a new application starts at this point. If this
+is not the behavior you desire, you should not be creating a new task. In
+addition, you should only use the new task flag if it is possible for the user
+to navigate from home back to where they are and launch the same Intent as a
+new task. Otherwise, if the user presses HOME instead of BACK from the task
+you have launched, your task and its activities will be ordered behind the
+home screen without a way to return to them.</p>
+
+<h3>Task Affinities</h3>
+
+<p>In some cases Android needs to know which task an activity belongs to even when
+it is not being launched in to a specific task. This is accomplished through
+task affinities, which provide a unique static name for the task that one or more
+activities are intended to run in. The default task affinity for an activity
+is the name of the .apk package name the activity is implemented in. This
+provides the normally expected behavior, where all of the activities in a
+particular .apk are part of a single application to the user.</p>
+
+<p>When starting a new activity without the
+{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK
+Intent.FLAG_ACTIVITY_NEW_TASK} flag, task affinities have no impact on the
+task the new activity will run in: it will always run in the task of the
+activity that is starting it. However, if the NEW_TASK flag is being used,
+then the affinity will be used to determine if a task already exists with
+the same affinity. If so, that task will be brought to the front and the
+new activity launched at the top of that task.</p>
+
+<p>This behavior is most useful for situations where you must use the
+NEW_TASK flag, in particular launching activities from status bar notifications
+or home screen shortcuts. The result is that, when the user launches your
+application this way, its current task state will be brought to the foreground,
+and the activity they now want to look at placed on top of it.</p>
+
+<p>You can assign your own task affinities in your manifest's
+{@link android.R.styleable#AndroidManifestApplication application} tag for
+all activities in the .apk, or the
+{@link android.R.styleable#AndroidManifestActivity activity} tag of
+individual activities. Some examples of how this can be used are:</p>
+
+<ul>
+<li>If your .apk contains multiple top-level applications that the user can
+launch, then you will probably want to assign different affinities to each
+of the activities that the users sees for your .apk. A good convention for
+coming up with distinct names is to append your .apk's package name with
+a colon separated string. For example, the "com.android.contacts" .apk
+may have the affinities "com.android.contacts:Dialer" and
+"com.android.contacts:ContactsList".</ul>
+<li>If you are replacing a notification, shortcut, or other such "inner"
+activity of an application that can be launched from outside of it, you may
+need to explicitly set the taskAffinity of your replacement activity to be
+the same as the application you are replacing. For example, if you are
+replacing the contacts details view (which the user can make and invoke
+shortcuts to), you would want to set the taskAffinity to
+"com.android.contacts".</li>
+</ul>
+
+<h3>Launch Modes and Launch Flags</h3>
+
+<p>The main way you control how activities interact with tasks is through
+the activity's
+{@link android.R.styleable#AndroidManifestActivity_launchMode launchMode}
+attribute and the {@link android.content.Intent#setFlags flags} associated
+with an Intent. These two parameters can work together in various ways
+to control the outcome of the activity launch, as described in their
+associated documentation. Here we will look at some common use cases and
+combinations of these parameters.</p>
+
+<p>The most common launch mode you will use (besides the default
+<code>standard</code> mode) is <code>singleTop</code>. This does not have
+an impact on tasks; it just avoids starting the same activity multiple times
+on the top of a stack.
+
+<p>The <code>singleTask</code> launch mode has a major
+impact on tasks: it causes the activity to always be started in
+a new task (or its existing task to be brought to the foreground). Using
+this mode requires a lot of care in how you interact with the rest of the
+system, as it impacts every path in to the activity. It should only be used
+with activities that are front doors to the application (that is, which
+support the MAIN action and LAUNCHER category).</p>
+
+<p>The <code>singleInstance</code> launch mode is even more specialized, and
+should only be used in applications that are implemented entirely as one
+activity.</p>
+
+<p>A situation you will often run in to is when another entity (such as the
+{@link android.app.SearchManager} or {@link android.app.NotificationManager})
+starts one of your activities. In this case, the
+{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK
+Intent.FLAG_ACTIVITY_NEW_TASK} flag must be used, because the activity is
+being started outside of a task (and the application/task may not even
+exist). As described previously, the standard behavior in this situation
+is to bring to the foreground the current task matching the new activity's
+affinity and start the new activity at the top of it. There are, however,
+other types of behavior that you can implement.</p>
+
+<p>One common approach is to also use the
+{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP
+Intent.FLAG_ACTIVITY_CLEAR_TOP} flag in conjunction with NEW_TASK. By doing so,
+if your task is already running, then it will be brought to the foreground,
+all of the activities on its stack cleared except the root activity, and the
+root activity's {@link android.app.Activity#onNewIntent} called with the
+Intent being started. Note that the activity often also use the <code>singleTop</code>
+or <code>singleTask</code> launch mode when using this approach, so that
+the current instance is given the new intent instead of requiring that it
+be destroyed and a new instance started.</p>
+
+<p>Another approach you can take is to set the notification activity's
+<code>android:taskAffinity</code> to the empty string "" (indicating no affinity)
+and setting the
+<code>{@link android.R.styleable#AndroidManifestActivity_noHistory
+android:noHistory}</code> and
+<code>{@link android.R.styleable#AndroidManifestActivity_excludeFromRecents
+android:excludeFromRecents}</code> attributes.
+This approach is useful if you would like the notification
+to take the user to a separate activity describing it, rather than return
+to the application's task. By specifying these attributes, the activity will
+be finished whether the user leaves it with BACK or HOME and it will not
+show up in the recent tasks list; if the <code>noHistory</code> attribute
+isn't specified, pressing HOME will result in the activity and its task
+remaining in the system, possibly with no way to return to it.</p>
+
+<p>Be sure to read the documentation on the
+{@link android.R.styleable#AndroidManifestActivity_launchMode launchMode attribute}
+and the {@link android.content.Intent#setFlags Intent flags} for the details
+on these options.</p>
+
+<h2 id="Processes">Processes</h2>
+
+<p>In Android, processes are entirely an implementation detail of applications
+and not something the user is normally aware of. Their main uses are simply:</p>
+
+<ul>
+<li> Improving stability or security by putting untrusted or unstable code
+into another process.
+<li> Reducing overhead by running the code of multiple .apks in the same
+process.
+<li> Helping the system manage resources by putting heavy-weight code in
+a separate process that can be killed independently of other parts of the
+application.
+</ul>
+
+<p>As described previously, the
+{@link android.R.styleable#AndroidManifestApplication_process process} attribute
+is used to control the process that particular application components run in.
+Note that this attribute can not be used to violate security of the system: if
+two .apks that are not sharing the same user ID try to run in the same process,
+this will not be allowed and different distinct processes will be created for
+each of them.</p>
+
+<p>See the <a href="{@docRoot}devel/security.html">security</a> document for
+more information on these security restrictions.</p>
+
+<h2 id="Threads">Threads</h2>
+
+<p>Every process has one or more threads running in it. In most situations, Android
+avoids creating additional threads in a process, keeping an application
+single-threaded unless it creates its own threads. An important repercussion
+of this is that all calls to {@link android.app.Activity},
+{@link android.content.BroadcastReceiver}, and {@link android.app.Service}
+instances are made only from the main thread of the process they are running in.</p>
+
+<p>Note that a new thread is <strong>not</strong> created for each
+Activity, BroadcastReceiver, Service, or ContentProvider instance:
+these application components are instantiated in the desired process (all in the
+same process unless otherwise specified), in the main thread of that process.
+This means that none of these components (including services) should perform
+long or blocking operations (such as networking calls or computation loops)
+when called by the system, since this will block
+all other components in the process. You can use the standard library
+{@link java.lang.Thread} class or Android's {@link android.os.HandlerThread}
+convenience class to perform long operations on another thread.</p>
+
+<p>There are a few important exceptions to this threading rule:</p>
+
+<ul>
+<li><p>Calls on to an {@link android.os.IBinder} or interface implemented on
+an IBinder are dispatched from the thread calling them or a thread pool in the
+local process if coming from another process, <em>not</em>
+from the main thread of their process. In particular, calls on to the IBinder
+of a {@link android.app.Service} will be called this way. (Though
+calls to methods on Service itself are done from the main thread.)
+This means that <em>implementations of IBinder interfaces must always be
+written in a thread-safe way, since they can be called from any number of
+arbitrary threads at the same time</em>.</p></li>
+
+<li><p>Calls to the main methods of {@link android.content.ContentProvider}
+are dispatched from the calling thread or main thread as with IBinder. The
+specific methods are documented in the ContentProvider class.
+This means that <em>implementations of these methods must always be
+written in a thread-safe way, since they can be called from any number of
+arbitrary threads at the same time</em>.</p></li>
+
+<li><p>Calls on {@link android.view.View} and its subclasses are made from the
+thread that the view's window is running in. Normally this will be the main
+thread of the process, however if you create a thread and show a window from
+there then the window's view hierarchy will be called from that thread.</p></li>
+</ul>
diff --git a/docs/html/guide/basics/building-blocks.jd b/docs/html/guide/basics/building-blocks.jd
new file mode 100644
index 0000000..b8a609e
--- /dev/null
+++ b/docs/html/guide/basics/building-blocks.jd
@@ -0,0 +1,76 @@
+page.title=Building Blocks
+@jd:body
+<h1>Android Building Blocks</h1>
+
+<p>You can think of an Android application as a collection of components, of
+various kinds. These components are for the most part quite loosely coupled,
+to the degree where you can accurately describe them as a federation of
+components rather than a single cohesive application.</p>
+
+<p>Generally, these components all run in the same system process. It's
+possible (and quite common) to create multiple threads within that process,
+and it's also possible to create completely separate child processes if you
+need to. Such cases are pretty uncommon though, because Android tries very
+hard to make processes transparent to your code.</p>
+
+<p>These are the most important parts of the Android APIs:</p>
+
+<dl>
+ <dt><a href="{@docRoot}devel/bblocks-manifest.html">AndroidManifest.xml</a></dt>
+ <dd>The AndroidManifest.xml file is the control file that tells the system
+ what to do with all the top-level components (specifically activities,
+ services, intent receivers, and content providers described below)
+ you've created. For instance, this is the
+ "glue" that actually specifies which Intents your Activities receive.</dd>
+
+ <dt>{@link android.app.Activity Activities}</dt>
+ <dd>An Activity is, fundamentally, an object that has a life cycle. An
+ Activity is a chunk of code that does some work; if necessary, that work
+ can include displaying a UI to the user. It doesn't have to, though - some
+ Activities never display UIs. Typically, you'll designate one of your
+ application's Activities as the entry point to your application. </dd>
+
+
+ <dt>{@link android.view.View Views}</dt>
+ <dd>A View is an object that knows how to draw itself to the screen.
+ Android user interfaces are comprised of trees of Views. If you want to
+ perform some custom graphical technique (as you might if you're writing a
+ game, or building some unusual new user interface widget) then you'd
+ create a View.</dd>
+
+
+ <dt>{@link android.content.Intent Intents}</dt>
+ <dd>An Intent is a simple message object that represents an "intention" to
+ do something. For example, if your application wants to display a web
+ page, it expresses its "Intent" to view the URI by creating an Intent
+ instance and handing it off to the system. The system locates some other
+ piece of code (in this case, the Browser) that knows how to handle that
+ Intent, and runs it. Intents can also be used to broadcast interesting
+ events (such as a notification) system-wide.</dd>
+
+
+ <dt>{@link android.app.Service Services}</dt>
+ <dd>A Service is a body of code that runs in the background. It can run in
+ its own process, or in the context of another application's process,
+ depending on its needs. Other components "bind" to a Service and invoke
+ methods on it via remote procedure calls. An example of a Service is a
+ media player; even when the user quits the media-selection UI, she
+ probably still intends for her music to keep playing. A Service keeps the
+ music going even when the UI has completed.</dd>
+
+
+ <dt>{@link android.app.NotificationManager Notifications}</dt>
+ <dd>A Notification is a small icon that appears in the status bar. Users
+ can interact with this icon to receive information. The most well-known
+ notifications are SMS messages, call history, and voicemail, but
+ applications can create their own. Notifications are the
+ strongly-preferred mechanism for alerting the user of something that needs
+ their attention.</dd>
+
+ <dt>{@link android.content.ContentProvider ContentProviders}</dt>
+ <dd>A ContentProvider is a data storehouse that provides access to data on
+ the device; the classic example is the ContentProvider that's used to
+ access the user's list of contacts. Your application can access data that
+ other applications have exposed via a ContentProvider, and you can also
+ define your own ContentProviders to expose data of your own.</dd>
+</dl>
diff --git a/docs/html/guide/basics/fixme-gs-core-packages.jd b/docs/html/guide/basics/fixme-gs-core-packages.jd
new file mode 100644
index 0000000..5281990
--- /dev/null
+++ b/docs/html/guide/basics/fixme-gs-core-packages.jd
@@ -0,0 +1,92 @@
+page.title=Getting Started
+@jd:body
+<h1>Getting Started with Android</h1>
+
+<p>To get started with Android, please read the following sections first:</p>
+<dl>
+ <dt><a href="{@docRoot}intro/installing.html">Installing the SDK and
+ Plugin</a></dt>
+ <dd>How to install the Android SDK and Eclipse plugin.</dd>
+ <dt><a href="{@docRoot}intro/develop-and-debug.html">Developing and Debugging</a></dt>
+ <dd>An introduction to developing and debugging Android applications in Eclipse,
+ plus information on using other IDEs.</dd>
+ <dt><a href="{@docRoot}intro/hello-android.html">Hello Android</a></dt>
+ <dd>Writing your first Android Application, the ever popular Hello World,
+ Android style.</dd>
+ <dt><a href="{@docRoot}intro/anatomy.html">Anatomy of an App</a></dt>
+ <dd>A guide to the structure and architecture of an Android
+ Application. This guide will help you understand the pieces that make up
+ an Android app.</dd>
+ <dt><a href="{@docRoot}intro/tutorial.html">Notepad Tutorial</a></dt>
+ <dd>This tutorial document will lead you through
+ constructing a real Android Application: A notepad which can create, edit
+ and delete notes, and covers many of the basic concepts with practical
+ examples.</dd>
+ <dt><a href="{@docRoot}intro/tools.html">Development Tools</a></dt>
+ <dd>The
+ command line tools included with the SDK, what they do, and how to use
+ them.</dd>
+ <dt><a href="{@docRoot}intro/appmodel.html">Application Model</a></dt>
+ <dd>A guide to Applications, Tasks, Processes, and Threads.
+ These are the elements that define the way your application is run by the
+ system and presented to the user.</dd>
+ <dt><a href="{@docRoot}intro/lifecycle.html">Application Life Cycle</a></dt>
+ <dd>The important life-cycle details for
+ Applications and the Activities running inside of them.</dd>
+
+</dl>
+
+<h2>Other Introductory Material</h2>
+<p>After reading the sections above, the following Getting Started information is also very useful:</p>
+
+
+<h3>Core Packages</h3>
+<p> These are the basic packages that make up the Android SDK for writing
+applications. The packages are organized as layers, listed here from
+lowest-level to highest.</p>
+
+<dl>
+ <dt>{@link android.util}</dt>
+ <dd>contains various low-level utility classes, such
+ as specialized container classes, XML utilities, etc.</dd>
+ <dt>{@link android.os}</dt>
+ <dd> provides basic operating system services, message
+ passing, and inter-process communication.</dd>
+ <dt>{@link android.graphics}</dt><dd>is the core rendering package.</dd>
+ <dt>{@link android.text}, {@link android.text.method}, {@link
+ android.text.style}, and {@link android.text.util} </dt>
+ <dd>supply a rich set of
+ text processing tools, supporting rich text, input methods, etc.</dd>
+ <dt>{@link android.database}</dt>
+ <dd>contains low-level APIs for working with
+ databases.</dd>
+ <dt>{@link android.content}</dt>
+ <dd>provides various services for accessing data
+ on the device: applications installed on the device and their associated
+ resources, and content providers for persistent dynamic data.</dd>
+ <dt>{@link android.view}</dt>
+ <dd>is the core user-interface framework.</dd>
+ <dt>{@link android.widget}</dt>
+ <dd>supplies standard user interface elements
+ (lists, buttons, layout managers, etc) built from the view package.</dd>
+ <dt>{@link android.app}</dt>
+ <dd>provides the high-level application model,
+ implemented using Activities.</dd>
+</dl>
+
+<h3>Other Notable Packages</h3>
+
+<p> These packages provide additional domain-specific features of the Android
+platform. They are not necessary for basic application development.</p>
+
+<dl>
+ <dt>{@link android.provider}</dt>
+ <dd>contains definitions for various standard
+ content providers included with the platform.</dd>
+ <dt>{@link android.telephony}</dt>
+ <dd>provides APIs for interacting with the
+ device's phone stack.</dd>
+ <dt>{@link android.webkit}</dt>
+ <dd>includes various APIs for working with
+ web-based content.</dd>
+</dl>
diff --git a/docs/html/guide/basics/index.html b/docs/html/guide/basics/index.html
new file mode 100644
index 0000000..4881acf
--- /dev/null
+++ b/docs/html/guide/basics/index.html
@@ -0,0 +1,8 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0;url=../index.html">
+</head>
+<body>
+<a href="../index.html">click here</a> if you are not redirected.
+</body>
+</html> \ No newline at end of file
diff --git a/docs/html/guide/basics/what-is-android.jd b/docs/html/guide/basics/what-is-android.jd
new file mode 100644
index 0000000..b75321b
--- /dev/null
+++ b/docs/html/guide/basics/what-is-android.jd
@@ -0,0 +1,135 @@
+page.title=What is Android?
+@jd:body
+
+<p>Android is a software stack for mobile devices that includes an operating
+system, middleware and key applications. The <a
+href="http://code.google.com/android/download.html">Android SDK</a>
+provides the tools and APIs necessary to begin developing applications on the
+Android platform using the Java programming language.</p>
+
+<h2>Features</h2>
+
+<ul>
+ <li><strong>Application framework</strong> enabling reuse and replacement
+ of components</li>
+ <li><strong>Dalvik virtual machine</strong> optimized for mobile
+ devices</li>
+ <li><strong>Integrated browser</strong> based on the open source <a
+ href="http://webkit.org/">WebKit</a> engine </li>
+ <li><strong>Optimized graphics</strong> powered by a custom 2D graphics library; 3D
+ graphics based on the OpenGL ES 1.0 specification (hardware acceleration
+ optional)</li>
+ <li><strong>SQLite</strong> for structured data storage</li>
+ <li><strong>Media support</strong> for common audio, video, and still
+ image formats (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG,
+ GIF)</li>
+ <li><strong>GSM Telephony</strong> (hardware dependent)</li>
+ <li><strong>Bluetooth, EDGE, 3G, and WiFi</strong> (hardware dependent)</li>
+ <li><strong>Camera, GPS, compass, and accelerometer</strong> (hardware dependent)</li>
+ <li><strong>Rich development environment</strong> including a device
+ emulator, tools for debugging, memory and performance profiling, and a plugin for the Eclipse IDE</li>
+</ul>
+
+<a name="os_architecture" id="os_architecture"></a>
+<h2>Android Architecture</h2>
+
+<p>The following diagram shows the major components of the Android operating
+system. Each section is described in more detail below.</p>
+
+<p><img src="{@docRoot}images/system-architecture.jpg" alt="Android System Architecture" width="713" height="512"></p>
+
+<a name="applications" id="applications"></a>
+<h2>Applications</h2>
+
+<p>Android will ship with a set of core applications including an email
+client, SMS program, calendar, maps, browser, contacts, and
+others. All applications are written using the Java programming language.</p>
+
+<a name="application_framework" id="application_framework"></a>
+<h2>Application Framework</h2>
+
+<p>Developers have full access to the same framework APIs used by the core
+applications. The application architecture is designed to simplify the reuse
+of components; any application can publish its capabilities and any other
+application may then make use of those capabilities (subject to security
+constraints enforced by the framework). This same mechanism allows components
+to be replaced by the user.</p>
+
+<p>Underlying all applications is a set of services and systems, including:
+<ul>
+ <li>A rich and extensible set of <a
+ href="{@docRoot}guide/tutorials/views/index.html">Views</a> that can be used to
+ build an application, including lists, grids, text boxes, buttons, and even
+ an embeddable web browser</li>
+ <li><a href="{@docRoot}guide/topics/providers/content-providers.html">Content
+ Providers</a> that enable applications to access data from other
+ applications (such as Contacts), or to share their own data</li> <li>A <a
+ href="{@docRoot}guide/topics/resources/resources-i18n.html">Resource
+ Manager</a>, providing access to non-code resources such as localized
+ strings, graphics, and layout files</li>
+ <li>A {@link android.app.NotificationManager Notification Manager} that enables
+ all applications to display custom alerts in the status bar</li>
+ <li>An {@link android.app.Activity Activity Manager} that manages the
+ lifecycle of applications and provides a common navigation backstack</li>
+</ul>
+
+<p>For more details and a walkthrough of an application, see the <a
+href="{@docRoot}guide/tutorials/notepad/index.html">Notepad Tutorial</a>.</p>
+
+<a name="libraries" id="libraries"></a>
+<h2>Libraries</h2>
+
+<p>Android includes a set of C/C++ libraries used by various components of the
+Android system. These capabilities are exposed to developers through the
+Android application framework. Some of the core libraries are listed below:</p>
+<ul>
+ <li><strong>System C library</strong> - a BSD-derived implementation of
+ the standard C system library (libc), tuned for embedded Linux-based
+ devices</li>
+ <li><strong>Media Libraries</strong> - based on PacketVideo's OpenCORE;
+ the libraries support playback and recording of many popular audio and video
+ formats, as well as static image files, including MPEG4, H.264, MP3, AAC,
+ AMR, JPG, and PNG</li>
+ <li><strong>Surface Manager</strong> - manages access to the display
+ subsystem and seamlessly composites 2D and 3D graphic layers from multiple
+ applications</li>
+ <li><strong>LibWebCore</strong> - a modern web browser engine which
+ powers both the Android browser and an embeddable web view</li>
+ <li><strong>SGL</strong> - the underlying 2D graphics
+ engine</li>
+ <li><strong>3D libraries</strong> - an implementation based on
+ OpenGL ES 1.0 APIs; the libraries use either hardware 3D acceleration
+ (where available) or the included, highly optimized 3D software
+ rasterizer</li>
+ <li><strong>FreeType</strong> - bitmap and vector font rendering</li>
+ <li><strong>SQLite</strong> - a powerful and lightweight relational
+ database engine available to all applications</li>
+</ul>
+
+<a name="runtime" id="runtime"></a>
+
+<h2>Android Runtime</h2>
+
+<p>Android includes a set of core libraries that provides most of
+the functionality available in the core libraries of the Java programming
+language.</p>
+
+<p>Every Android application runs in its own process, with its own instance of
+the Dalvik virtual machine. Dalvik has been written so that a device can run
+multiple VMs efficiently. The Dalvik VM executes files in the Dalvik
+Executable (.dex) format which is optimized for minimal memory
+footprint. The VM is register-based, and runs classes
+compiled by a Java language compiler that have been transformed into the .dex
+format by the included &quot;dx&quot; tool.</p>
+
+<p>The Dalvik VM relies on the Linux kernel for underlying functionality such
+as threading and low-level memory management.</p>
+
+<a name="kernel" id="kernel"></a>
+
+<h2>Linux Kernel</h2>
+
+<p>Android relies on Linux version 2.6 for core system services such as
+security, memory management, process management, network stack, and driver
+model. The kernel also acts as an abstraction layer between the hardware and
+the rest of the software stack.</p>