docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
page.title=Activities
|
2013-03-11 13:52:35 -07:00
|
|
|
page.tags="activity","intent"
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
@jd:body
|
|
|
|
|
|
|
|
<div id="qv-wrapper">
|
|
|
|
<div id="qv">
|
|
|
|
<h2>Quickview</h2>
|
|
|
|
<ul>
|
|
|
|
<li>An activity provides a user interface for a single screen in your application</li>
|
|
|
|
<li>Activities can move into the background and then be resumed with their state restored</li>
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
<h2>In this document</h2>
|
|
|
|
<ol>
|
|
|
|
<li><a href="#Creating">Creating an Activity</a>
|
|
|
|
<ol>
|
|
|
|
<li><a href="#UI">Implementing a user interface</a></li>
|
|
|
|
<li><a href="#Declaring">Declaring the activity in the manifest</a></li>
|
|
|
|
</ol>
|
|
|
|
</li>
|
|
|
|
<li><a href="#StartingAnActivity">Starting an Activity</a>
|
|
|
|
<ol>
|
2011-12-29 11:28:38 -08:00
|
|
|
<li><a href="#StartingAnActivityForResult">Starting an activity for a result</a></li>
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
</ol>
|
|
|
|
</li>
|
2011-12-29 11:28:38 -08:00
|
|
|
<li><a href="#ShuttingDown">Shutting Down an Activity</a></li>
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
<li><a href="#Lifecycle">Managing the Activity Lifecycle</a>
|
|
|
|
<ol>
|
|
|
|
<li><a href="#ImplementingLifecycleCallbacks">Implementing the lifecycle callbacks</a></li>
|
|
|
|
<li><a href="#SavingActivityState">Saving activity state</a></li>
|
|
|
|
<li><a href="#ConfigurationChanges">Handling configuration changes</a></li>
|
|
|
|
<li><a href="#CoordinatingActivities">Coordinating activities</a></li>
|
|
|
|
</ol>
|
|
|
|
</li>
|
|
|
|
</ol>
|
|
|
|
|
|
|
|
<h2>Key classes</h2>
|
|
|
|
<ol>
|
|
|
|
<li>{@link android.app.Activity}</li>
|
|
|
|
</ol>
|
|
|
|
|
|
|
|
<h2>See also</h2>
|
|
|
|
<ol>
|
2012-06-21 17:14:39 -07:00
|
|
|
<li><a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
Stack</a></li>
|
|
|
|
</ol>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>An {@link android.app.Activity} is an application component that provides a screen with which
|
|
|
|
users can interact in order to do something, such as dial the phone, take a photo, send an email, or
|
|
|
|
view a map. Each activity is given a window in which to draw its user interface. The window
|
|
|
|
typically fills the screen, but may be smaller than the screen and float on top of other
|
|
|
|
windows.</p>
|
|
|
|
|
|
|
|
<p> An application usually consists of multiple activities that are loosely bound
|
|
|
|
to each other. Typically, one activity in an application is specified as the "main" activity, which
|
|
|
|
is presented to the user when launching the application for the first time. Each
|
|
|
|
activity can then start another activity in order to perform different actions. Each time a new
|
|
|
|
activity starts, the previous activity is stopped, but the system preserves the activity
|
|
|
|
in a stack (the "back stack"). When a new activity starts, it is pushed onto the back stack and
|
2012-02-24 12:04:06 -08:00
|
|
|
takes user focus. The back stack abides to the basic "last in, first out" stack mechanism,
|
2012-01-31 19:14:35 -08:00
|
|
|
so, when the user is done with the current activity and presses the <em>Back</em> button, it
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
is popped from the stack (and destroyed) and the previous activity resumes. (The back stack is
|
2012-06-21 17:14:39 -07:00
|
|
|
discussed more in the <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
and Back Stack</a> document.)</p>
|
|
|
|
|
|
|
|
<p>When an activity is stopped because a new activity starts, it is notified of this change in state
|
|
|
|
through the activity's lifecycle callback methods.
|
|
|
|
There are several callback methods that an activity might receive, due to a change in its
|
|
|
|
state—whether the system is creating it, stopping it, resuming it, or destroying it—and
|
|
|
|
each callback provides you the opportunity to perform specific work that's
|
|
|
|
appropriate to that state change. For instance, when stopped, your activity should release any
|
|
|
|
large objects, such as network or database connections. When the activity resumes, you can
|
|
|
|
reacquire the necessary resources and resume actions that were interrupted. These state transitions
|
|
|
|
are all part of the activity lifecycle.</p>
|
|
|
|
|
|
|
|
<p>The rest of this document discusses the basics of how to build and use an activity,
|
|
|
|
including a complete discussion of how the activity lifecycle works, so you can properly manage
|
|
|
|
the transition between various activity states.</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h2 id="Creating">Creating an Activity</h2>
|
|
|
|
|
|
|
|
<p>To create an activity, you must create a subclass of {@link android.app.Activity} (or
|
|
|
|
an existing subclass of it). In your subclass, you need to implement callback methods that the
|
|
|
|
system calls when the activity transitions between various states of its lifecycle, such as when
|
|
|
|
the activity is being created, stopped, resumed, or destroyed. The two most important callback
|
|
|
|
methods are:</p>
|
|
|
|
|
|
|
|
<dl>
|
|
|
|
<dt>{@link android.app.Activity#onCreate onCreate()}</dt>
|
|
|
|
<dd>You must implement this method. The system calls this when creating your
|
|
|
|
activity. Within your implementation, you should initialize the essential components of your
|
|
|
|
activity.
|
|
|
|
Most importantly, this is where you must call {@link android.app.Activity#setContentView
|
|
|
|
setContentView()} to define the layout for the activity's user interface.</dd>
|
|
|
|
<dt>{@link android.app.Activity#onPause onPause()}</dt>
|
|
|
|
<dd>The system calls this method as the first indication that the user is leaving your
|
|
|
|
activity (though it does not always mean the activity is being destroyed). This is usually where you
|
|
|
|
should commit any changes that should be persisted beyond the current user session (because
|
|
|
|
the user might not come back).</dd>
|
|
|
|
</dl>
|
|
|
|
|
|
|
|
<p>There are several other lifecycle callback methods that you should use in order to provide a
|
|
|
|
fluid user experience between activities and handle unexpected interuptions that cause your activity
|
|
|
|
to be stopped and even destroyed. All of the lifecycle callback methods are discussed later, in
|
|
|
|
the section about <a href="#Lifecycle">Managing the Activity Lifecycle</a>.</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h3 id="UI">Implementing a user interface</h3>
|
|
|
|
|
|
|
|
<p> The user interface for an activity is provided by a hierarchy of views—objects derived
|
|
|
|
from the {@link android.view.View} class. Each view controls a particular rectangular space
|
|
|
|
within the activity's window and can respond to user interaction. For example, a view might be a
|
|
|
|
button that initiates an action when the user touches it.</p>
|
|
|
|
|
|
|
|
<p>Android provides a number of ready-made views that you can use to design and organize your
|
|
|
|
layout. "Widgets" are views that provide a visual (and interactive) elements for the screen, such
|
|
|
|
as a button, text field, checkbox, or just an image. "Layouts" are views derived from {@link
|
|
|
|
android.view.ViewGroup} that provide a unique layout model for its child views, such as a linear
|
|
|
|
layout, a grid layout, or relative layout. You can also subclass the {@link android.view.View} and
|
|
|
|
{@link android.view.ViewGroup} classes (or existing subclasses) to create your own widgets and
|
|
|
|
layouts and apply them to your activity layout.</p>
|
|
|
|
|
|
|
|
<p>The most common way to define a layout using views is with an XML layout file saved in your
|
|
|
|
application resources. This way, you can maintain the design of your user interface separately from
|
|
|
|
the source code that defines the activity's behavior. You can set the layout as the UI for your
|
|
|
|
activity with {@link android.app.Activity#setContentView(int) setContentView()}, passing the
|
|
|
|
resource ID for the layout. However, you can also create new {@link android.view.View}s in your
|
|
|
|
activity code and build a view hierarchy by inserting new {@link
|
|
|
|
android.view.View}s into a {@link android.view.ViewGroup}, then use that layout by passing the root
|
|
|
|
{@link android.view.ViewGroup} to {@link android.app.Activity#setContentView(View)
|
|
|
|
setContentView()}.</p>
|
|
|
|
|
|
|
|
<p>For information about creating a user interface, see the <a
|
|
|
|
href="{@docRoot}guide/topics/ui/index.html">User Interface</a> documentation.</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h3 id="Declaring">Declaring the activity in the manifest</h3>
|
|
|
|
|
|
|
|
<p>You must declare your activity in the manifest file in order for it to
|
2011-06-20 16:36:28 -07:00
|
|
|
be accessible to the system. To declare your activity, open your manifest file and add an <a
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element
|
|
|
|
as a child of the <a
|
|
|
|
href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
|
|
|
|
element. For example:</p>
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
<manifest ... >
|
|
|
|
<application ... >
|
|
|
|
<activity android:name=".ExampleActivity" />
|
|
|
|
...
|
|
|
|
</application ... >
|
|
|
|
...
|
|
|
|
</manifest >
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
<p>There are several other attributes that you can include in this element, to define properties
|
|
|
|
such as the label for the activity, an icon for the activity, or a theme to style the activity's
|
2011-06-20 16:36:28 -07:00
|
|
|
UI. The <a href="{@docRoot}guide/topics/manifest/activity-element.html#nm">{@code android:name}</a>
|
|
|
|
attribute is the only required attribute—it specifies the class name of the activity. Once
|
|
|
|
you publish your application, you should not change this name, because if you do, you might break
|
|
|
|
some functionality, such as application shortcuts (read the blog post, <a
|
|
|
|
href="http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html">Things
|
|
|
|
That Cannot Change</a>).</p>
|
|
|
|
|
|
|
|
<p>See the <a
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element
|
2011-06-20 16:36:28 -07:00
|
|
|
reference for more information about declaring your activity in the manifest.</p>
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
|
|
|
|
|
|
|
|
<h4>Using intent filters</h4>
|
|
|
|
|
|
|
|
<p>An <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
|
|
|
|
<activity>}</a> element can also specify various intent filters—using the <a
|
|
|
|
href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
|
|
|
|
<intent-filter>}</a> element—in order to declare how other application components may
|
|
|
|
activate it.</p>
|
|
|
|
|
|
|
|
<p>When you create a new application using the Android SDK tools, the stub activity
|
|
|
|
that's created for you automatically includes an intent filter that declares the activity
|
|
|
|
responds to the "main" action and should be placed in the "launcher" category. The intent filter
|
|
|
|
looks like this:</p>
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
|
|
|
|
<intent-filter>
|
|
|
|
<action android:name="android.intent.action.MAIN" />
|
|
|
|
<category android:name="android.intent.category.LAUNCHER" />
|
|
|
|
</intent-filter>
|
|
|
|
</activity>
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
<p>The <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
|
|
|
|
<action>}</a> element specifies that this is the "main" entry point to the application. The <a
|
|
|
|
href="{@docRoot}guide/topics/manifest/category-element.html">{@code
|
|
|
|
<category>}</a> element specifies that this activity should be listed in the
|
|
|
|
system's application launcher (to allow users to launch this activity).</p>
|
|
|
|
|
|
|
|
<p>If you intend for your application to be self-contained and not allow other applications to
|
|
|
|
activate its activities, then you don't need any other intent filters. Only one activity should
|
|
|
|
have the "main" action and "launcher" category, as in the previous example. Activities that
|
|
|
|
you don't want to make available to other applications should have no intent filters and you can
|
|
|
|
start them yourself using explicit intents (as discussed in the following section).</p>
|
|
|
|
|
|
|
|
<p>However, if you want your activity to respond to implicit intents that are delivered from
|
|
|
|
other applications (and your own), then you must define additional intent filters for your
|
|
|
|
activity. For each type of intent to which you want to respond, you must include an <a
|
|
|
|
href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
|
|
|
|
<intent-filter>}</a> that includes an
|
|
|
|
<a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
|
|
|
|
<action>}</a> element and, optionally, a <a
|
|
|
|
href="{@docRoot}guide/topics/manifest/category-element.html">{@code
|
|
|
|
<category>}</a> element and/or a <a
|
|
|
|
href="{@docRoot}guide/topics/manifest/data-element.html">{@code
|
|
|
|
<data>}</a> element. These elements specify the type of intent to which your activity can
|
|
|
|
respond.</p>
|
|
|
|
|
|
|
|
<p>For more information about how your activities can respond to intents, see the <a
|
2012-06-21 17:14:39 -07:00
|
|
|
href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
document.</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h2 id="StartingAnActivity">Starting an Activity</h2>
|
|
|
|
|
|
|
|
<p>You can start another activity by calling {@link android.app.Activity#startActivity
|
|
|
|
startActivity()}, passing it an {@link android.content.Intent} that describes the activity you
|
|
|
|
want to start. The intent specifies either the exact activity you want to start or describes the
|
|
|
|
type of action you want to perform (and the system selects the appropriate activity for you,
|
|
|
|
which
|
|
|
|
can even be from a different application). An intent can also carry small amounts of data to be
|
|
|
|
used by the activity that is started.</p>
|
|
|
|
|
|
|
|
<p>When working within your own application, you'll often need to simply launch a known activity.
|
|
|
|
You can do so by creating an intent that explicitly defines the activity you want to start,
|
|
|
|
using the class name. For example, here's how one activity starts another activity named {@code
|
|
|
|
SignInActivity}:</p>
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
Intent intent = new Intent(this, SignInActivity.class);
|
|
|
|
startActivity(intent);
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
<p>However, your application might also want to perform some action, such as send an email, text
|
|
|
|
message, or status update, using data from your activity. In this case, your application might
|
|
|
|
not have its own activities to perform such actions, so you can instead leverage the activities
|
|
|
|
provided by other applications on the device, which can perform the actions for you. This is where
|
|
|
|
intents are really valuable—you can create an intent that describes an action you want to
|
|
|
|
perform and the system
|
|
|
|
launches the appropriate activity from another application. If there are
|
|
|
|
multiple activities that can handle the intent, then the user can select which one to use. For
|
|
|
|
example, if you want to allow the user to send an email message, you can create the
|
|
|
|
following intent:</p>
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
Intent intent = new Intent(Intent.ACTION_SEND);
|
|
|
|
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
|
|
|
|
startActivity(intent);
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
<p>The {@link android.content.Intent#EXTRA_EMAIL} extra added to the intent is a string array of
|
|
|
|
email addresses to which the email should be sent. When an email application responds to this
|
|
|
|
intent, it reads the string array provided in the extra and places them in the "to" field of the
|
|
|
|
email composition form. In this situation, the email application's activity starts and when the
|
|
|
|
user is done, your activity resumes.</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h3 id="StartingAnActivityForResult">Starting an activity for a result</h3>
|
|
|
|
|
|
|
|
<p>Sometimes, you might want to receive a result from the activity that you start. In that case,
|
|
|
|
start the activity by calling {@link android.app.Activity#startActivityForResult
|
|
|
|
startActivityForResult()} (instead of {@link android.app.Activity#startActivity
|
|
|
|
startActivity()}). To then receive the result from the subsequent
|
|
|
|
activity, implement the {@link android.app.Activity#onActivityResult onActivityResult()} callback
|
|
|
|
method. When the subsequent activity is done, it returns a result in an {@link
|
|
|
|
android.content.Intent} to your {@link android.app.Activity#onActivityResult onActivityResult()}
|
|
|
|
method.</p>
|
|
|
|
|
|
|
|
<p>For example, perhaps you want the user to pick one of their contacts, so your activity can
|
|
|
|
do something with the information in that contact. Here's how you can create such an intent and
|
|
|
|
handle the result:</p>
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
private void pickContact() {
|
|
|
|
// Create an intent to "pick" a contact, as defined by the content provider URI
|
|
|
|
Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
|
|
|
|
startActivityForResult(intent, PICK_CONTACT_REQUEST);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
|
|
// If the request went well (OK) and the request was PICK_CONTACT_REQUEST
|
|
|
|
if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
|
|
|
|
// Perform a query to the contact's content provider for the contact's name
|
|
|
|
Cursor cursor = getContentResolver().query(data.getData(),
|
|
|
|
new String[] {Contacts.DISPLAY_NAME}, null, null, null);
|
|
|
|
if (cursor.moveToFirst()) { // True if the cursor is not empty
|
|
|
|
int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
|
|
|
|
String name = cursor.getString(columnIndex);
|
|
|
|
// Do something with the selected contact's name...
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
<p>This example shows the basic logic you should use in your {@link
|
|
|
|
android.app.Activity#onActivityResult onActivityResult()} method in order to handle an
|
|
|
|
activity result. The first condition checks whether the request was successful—if it was, then
|
|
|
|
the {@code resultCode} will be {@link android.app.Activity#RESULT_OK}—and whether the request
|
|
|
|
to which this result is responding is known—in this case, the {@code requestCode} matches the
|
|
|
|
second parameter sent with {@link android.app.Activity#startActivityForResult
|
|
|
|
startActivityForResult()}. From there, the code handles the activity result by querying the
|
|
|
|
data returned in an {@link android.content.Intent} (the {@code data} parameter).</p>
|
|
|
|
|
|
|
|
<p>What happens is, a {@link
|
|
|
|
android.content.ContentResolver} performs a query against a content provider, which returns a
|
|
|
|
{@link android.database.Cursor} that allows the queried data to be read. For more information, see
|
|
|
|
the <a
|
|
|
|
href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a> document.</p>
|
|
|
|
|
|
|
|
<p>For more information about using intents, see the <a
|
2012-06-21 17:14:39 -07:00
|
|
|
href="{@docRoot}guide/components/intents-filters.html">Intents and Intent
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
Filters</a> document.</p>
|
|
|
|
|
|
|
|
|
|
|
|
<h2 id="ShuttingDown">Shutting Down an Activity</h2>
|
|
|
|
|
|
|
|
<p>You can shut down an activity by calling its {@link android.app.Activity#finish
|
|
|
|
finish()} method. You can also shut down a separate activity that you previously started by calling
|
|
|
|
{@link android.app.Activity#finishActivity finishActivity()}.</p>
|
|
|
|
|
|
|
|
<p class="note"><strong>Note:</strong> In most cases, you should not explicitly finish an activity
|
|
|
|
using these methods. As discussed in the following section about the activity lifecycle, the
|
|
|
|
Android system manages the life of an activity for you, so you do not need to finish your own
|
|
|
|
activities. Calling these methods could adversely affect the expected user
|
|
|
|
experience and should only be used when you absolutely do not want the user to return to this
|
|
|
|
instance of the activity.</p>
|
|
|
|
|
|
|
|
|
|
|
|
<h2 id="Lifecycle">Managing the Activity Lifecycle</h2>
|
|
|
|
|
|
|
|
<p>Managing the lifecycle of your activities by implementing callback methods is
|
|
|
|
crucial to developing a strong
|
|
|
|
and flexible application. The lifecycle of an activity is directly affected by its association with
|
|
|
|
other activities, its task and back stack.</p>
|
|
|
|
|
|
|
|
<p>An activity can exist in essentially three states:</p>
|
|
|
|
|
|
|
|
<dl>
|
|
|
|
<dt><i>Resumed</i></dt>
|
|
|
|
<dd>The activity is in the foreground of the screen and has user focus. (This state is
|
|
|
|
also sometimes referred to as "running".)</dd>
|
|
|
|
|
|
|
|
<dt><i>Paused</i></dt>
|
|
|
|
<dd>Another activity is in the foreground and has focus, but this one is still visible. That is,
|
|
|
|
another activity is visible on top of this one and that activity is partially transparent or doesn't
|
|
|
|
cover the entire screen. A paused activity is completely alive (the {@link android.app.Activity}
|
|
|
|
object is retained in memory, it maintains all state and member information, and remains attached to
|
|
|
|
the window manager), but can be killed by the system in extremely low memory situations.</dd>
|
|
|
|
|
|
|
|
<dt><i>Stopped</i></dt>
|
|
|
|
<dd>The activity is completely obscured by another activity (the activity is now in the
|
|
|
|
"background"). A stopped activity is also still alive (the {@link android.app.Activity}
|
|
|
|
object is retained in memory, it maintains all state and member information, but is <em>not</em>
|
|
|
|
attached to the window manager). However, it is no longer visible to the user and it
|
|
|
|
can be killed by the system when memory is needed elsewhere.</dd>
|
|
|
|
</dl>
|
|
|
|
|
|
|
|
<p>If an activity is paused or stopped, the system can drop it from memory either by asking it to
|
|
|
|
finish (calling its {@link android.app.Activity#finish finish()} method), or simply killing its
|
|
|
|
process. When the activity is opened again (after being finished or killed), it must be created all
|
|
|
|
over.</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h3 id="ImplementingLifecycleCallbacks">Implementing the lifecycle callbacks</h3>
|
|
|
|
|
|
|
|
<p>When an activity transitions into and out of the different states described above, it is notified
|
|
|
|
through various callback methods. All of the callback methods are hooks that you
|
|
|
|
can override to do appropriate work when the state of your activity changes. The following skeleton
|
|
|
|
activity includes each of the fundamental lifecycle methods:</p>
|
|
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
public class ExampleActivity extends Activity {
|
|
|
|
@Override
|
|
|
|
public void {@link android.app.Activity#onCreate onCreate}(Bundle savedInstanceState) {
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
// The activity is being created.
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
protected void {@link android.app.Activity#onStart onStart()} {
|
|
|
|
super.onStart();
|
|
|
|
// The activity is about to become visible.
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
protected void {@link android.app.Activity#onResume onResume()} {
|
|
|
|
super.onResume();
|
|
|
|
// The activity has become visible (it is now "resumed").
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
protected void {@link android.app.Activity#onPause onPause()} {
|
|
|
|
super.onPause();
|
|
|
|
// Another activity is taking focus (this activity is about to be "paused").
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
protected void {@link android.app.Activity#onStop onStop()} {
|
|
|
|
super.onStop();
|
|
|
|
// The activity is no longer visible (it is now "stopped")
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
protected void {@link android.app.Activity#onDestroy onDestroy()} {
|
|
|
|
super.onDestroy();
|
|
|
|
// The activity is about to be destroyed.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
<p class="note"><strong>Note:</strong> Your implementation of these lifecycle methods must
|
|
|
|
always call the superclass implementation before doing any work, as shown in the examples above.</p>
|
|
|
|
|
|
|
|
<p>Taken together, these methods define the entire lifecycle of an activity. By implementing these
|
|
|
|
methods, you can monitor three nested loops in the activity lifecycle: </p>
|
|
|
|
|
|
|
|
<ul>
|
|
|
|
<li>The <b>entire lifetime</b> of an activity happens between the call to {@link
|
|
|
|
android.app.Activity#onCreate onCreate()} and the call to {@link
|
|
|
|
android.app.Activity#onDestroy}. Your activity should perform setup of
|
|
|
|
"global" state (such as defining layout) in {@link android.app.Activity#onCreate onCreate()}, and
|
|
|
|
release all remaining resources in {@link android.app.Activity#onDestroy}. For example, if your
|
|
|
|
activity has a thread running in the background to download data from the network, it might create
|
|
|
|
that thread in {@link android.app.Activity#onCreate onCreate()} and then stop the thread in {@link
|
|
|
|
android.app.Activity#onDestroy}.</li>
|
|
|
|
|
|
|
|
<li><p>The <b>visible lifetime</b> of an activity happens between the call to {@link
|
|
|
|
android.app.Activity#onStart onStart()} and the call to {@link
|
|
|
|
android.app.Activity#onStop onStop()}. During this time, the user can see the activity
|
|
|
|
on-screen and interact with it. For example, {@link android.app.Activity#onStop onStop()} is called
|
|
|
|
when a new activity starts and this one is no longer visible. Between these two methods, you can
|
|
|
|
maintain resources that are needed to show the activity to the user. For example, you can register a
|
|
|
|
{@link android.content.BroadcastReceiver} in {@link
|
|
|
|
android.app.Activity#onStart onStart()} to monitor changes that impact your UI, and unregister
|
|
|
|
it in {@link android.app.Activity#onStop onStop()} when the user can no longer see what you are
|
|
|
|
displaying. The system might call {@link android.app.Activity#onStart onStart()} and {@link
|
|
|
|
android.app.Activity#onStop onStop()} multiple times during the entire lifetime of the activity, as
|
|
|
|
the activity alternates between being visible and hidden to the user.</p></li>
|
|
|
|
|
|
|
|
<li><p>The <b>foreground lifetime</b> of an activity happens between the call to {@link
|
|
|
|
android.app.Activity#onResume onResume()} and the call to {@link android.app.Activity#onPause
|
|
|
|
onPause()}. During this time, the activity is in front of all other activities on screen and has
|
|
|
|
user input focus. An activity can frequently transition in and out of the foreground—for
|
|
|
|
example, {@link android.app.Activity#onPause onPause()} is called when the device goes to sleep or
|
|
|
|
when a dialog appears. Because this state can transition often, the code in these two methods should
|
|
|
|
be fairly lightweight in order to avoid slow transitions that make the user wait.</p></li>
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
<p>Figure 1 illustrates these loops and the paths an activity might take between states.
|
|
|
|
The rectangles represent the callback methods you can implement to perform operations when
|
|
|
|
the activity transitions between states. <p>
|
|
|
|
|
|
|
|
<img src="{@docRoot}images/activity_lifecycle.png" alt="" />
|
|
|
|
<p class="img-caption"><strong>Figure 1.</strong> The activity lifecycle.</p>
|
|
|
|
|
|
|
|
<p>The same lifecycle callback methods are listed in table 1, which describes each of the callback
|
|
|
|
methods in more detail and locates each one within the
|
|
|
|
activity's overall lifecycle, including whether the system can kill the activity after the
|
|
|
|
callback method completes.</p>
|
|
|
|
|
|
|
|
<p class="table-caption"><strong>Table 1.</strong> A summary of the activity lifecycle's
|
|
|
|
callback methods.</p>
|
|
|
|
|
|
|
|
<table border="2" width="85%" frame="hsides" rules="rows">
|
|
|
|
<colgroup align="left" span="3"></colgroup>
|
|
|
|
<colgroup align="left"></colgroup>
|
|
|
|
<colgroup align="center"></colgroup>
|
|
|
|
<colgroup align="center"></colgroup>
|
|
|
|
|
|
|
|
<thead>
|
|
|
|
<tr><th colspan="3">Method</th> <th>Description</th> <th>Killable after?</th> <th>Next</th></tr>
|
|
|
|
</thead>
|
|
|
|
|
|
|
|
<tbody>
|
|
|
|
<tr>
|
|
|
|
<td colspan="3" align="left"><code>{@link android.app.Activity#onCreate onCreate()}</code></td>
|
|
|
|
<td>Called when the activity is first created.
|
|
|
|
This is where you should do all of your normal static set up —
|
|
|
|
create views, bind data to lists, and so on. This method is passed
|
|
|
|
a Bundle object containing the activity's previous state, if that
|
|
|
|
state was captured (see <a href="#actstate">Saving Activity State</a>,
|
|
|
|
later).
|
|
|
|
<p>Always followed by {@code onStart()}.</p></td>
|
|
|
|
<td align="center">No</td>
|
|
|
|
<td align="center">{@code onStart()}</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td rowspan="5" style="border-left: none; border-right: none;"> </td>
|
|
|
|
<td colspan="2" align="left"><code>{@link android.app.Activity#onRestart
|
|
|
|
onRestart()}</code></td>
|
|
|
|
<td>Called after the activity has been stopped, just prior to it being
|
|
|
|
started again.
|
|
|
|
<p>Always followed by {@code onStart()}</p></td>
|
|
|
|
<td align="center">No</td>
|
|
|
|
<td align="center">{@code onStart()}</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td colspan="2" align="left"><code>{@link android.app.Activity#onStart onStart()}</code></td>
|
|
|
|
<td>Called just before the activity becomes visible to the user.
|
|
|
|
<p>Followed by {@code onResume()} if the activity comes
|
|
|
|
to the foreground, or {@code onStop()} if it becomes hidden.</p></td>
|
|
|
|
<td align="center">No</td>
|
|
|
|
<td align="center">{@code onResume()} <br/>or<br/> {@code onStop()}</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td rowspan="2" style="border-left: none;"> </td>
|
|
|
|
<td align="left"><code>{@link android.app.Activity#onResume onResume()}</code></td>
|
|
|
|
<td>Called just before the activity starts
|
|
|
|
interacting with the user. At this point the activity is at
|
|
|
|
the top of the activity stack, with user input going to it.
|
|
|
|
<p>Always followed by {@code onPause()}.</p></td>
|
|
|
|
<td align="center">No</td>
|
|
|
|
<td align="center">{@code onPause()}</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td align="left"><code>{@link android.app.Activity#onPause onPause()}</code></td>
|
|
|
|
<td>Called when the system is about to start resuming another
|
|
|
|
activity. This method is typically used to commit unsaved changes to
|
|
|
|
persistent data, stop animations and other things that may be consuming
|
|
|
|
CPU, and so on. It should do whatever it does very quickly, because
|
|
|
|
the next activity will not be resumed until it returns.
|
|
|
|
<p>Followed either by {@code onResume()} if the activity
|
|
|
|
returns back to the front, or by {@code onStop()} if it becomes
|
|
|
|
invisible to the user.</td>
|
|
|
|
<td align="center"><strong style="color:#800000">Yes</strong></td>
|
|
|
|
<td align="center">{@code onResume()} <br/>or<br/> {@code onStop()}</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td colspan="2" align="left"><code>{@link android.app.Activity#onStop onStop()}</code></td>
|
|
|
|
<td>Called when the activity is no longer visible to the user. This
|
|
|
|
may happen because it is being destroyed, or because another activity
|
|
|
|
(either an existing one or a new one) has been resumed and is covering it.
|
|
|
|
<p>Followed either by {@code onRestart()} if
|
|
|
|
the activity is coming back to interact with the user, or by
|
|
|
|
{@code onDestroy()} if this activity is going away.</p></td>
|
|
|
|
<td align="center"><strong style="color:#800000">Yes</strong></td>
|
|
|
|
<td align="center">{@code onRestart()} <br/>or<br/> {@code onDestroy()}</td>
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td colspan="3" align="left"><code>{@link android.app.Activity#onDestroy
|
|
|
|
onDestroy()}</code></td>
|
|
|
|
<td>Called before the activity is destroyed. This is the final call
|
|
|
|
that the activity will receive. It could be called either because the
|
|
|
|
activity is finishing (someone called <code>{@link android.app.Activity#finish
|
|
|
|
finish()}</code> on it), or because the system is temporarily destroying this
|
|
|
|
instance of the activity to save space. You can distinguish
|
|
|
|
between these two scenarios with the <code>{@link
|
|
|
|
android.app.Activity#isFinishing isFinishing()}</code> method.</td>
|
|
|
|
<td align="center"><strong style="color:#800000">Yes</strong></td>
|
|
|
|
<td align="center"><em>nothing</em></td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
<p>The column labeled "Killable after?" indicates whether or not the system can
|
|
|
|
kill the process hosting the activity at any time <em>after the method returns</em>, without
|
|
|
|
executing another line of the activity's code. Three methods are marked "yes": ({@link
|
|
|
|
android.app.Activity#onPause
|
|
|
|
onPause()}, {@link android.app.Activity#onStop onStop()}, and {@link android.app.Activity#onDestroy
|
|
|
|
onDestroy()}). Because {@link android.app.Activity#onPause onPause()} is the first
|
|
|
|
of the three, once the activity is created, {@link android.app.Activity#onPause onPause()} is the
|
|
|
|
last method that's guaranteed to be called before the process <em>can</em> be killed—if
|
|
|
|
the system must recover memory in an emergency, then {@link
|
|
|
|
android.app.Activity#onStop onStop()} and {@link android.app.Activity#onDestroy onDestroy()} might
|
|
|
|
not be called. Therefore, you should use {@link android.app.Activity#onPause onPause()} to write
|
|
|
|
crucial persistent data (such as user edits) to storage. However, you should be selective about
|
|
|
|
what information must be retained during {@link android.app.Activity#onPause onPause()}, because any
|
|
|
|
blocking procedures in this method block the transition to the next activity and slow the user
|
|
|
|
experience.</p>
|
|
|
|
|
|
|
|
<p> Methods that are marked "No" in the <b>Killable</b> column protect the process hosting the
|
|
|
|
activity from being killed from the moment they are called. Thus, an activity is killable
|
|
|
|
from the time {@link android.app.Activity#onPause onPause()} returns to the time
|
|
|
|
{@link android.app.Activity#onResume onResume()} is called. It will not again be killable until
|
|
|
|
{@link android.app.Activity#onPause onPause()} is again called and returns. </p>
|
|
|
|
|
|
|
|
<p class="note"><strong>Note:</strong> An activity that's not technically "killable" by this
|
|
|
|
definition in table 1 might still be killed by the system—but that would happen only in
|
|
|
|
extreme circumstances when there is no other recourse. When an activity might be killed is
|
|
|
|
discussed more in the <a
|
2012-06-21 17:14:39 -07:00
|
|
|
href="{@docRoot}guide/components/processes-and-threads.html">Processes and
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
Threading</a> document.</p>
|
|
|
|
|
|
|
|
|
|
|
|
<h3 id="SavingActivityState">Saving activity state</h3>
|
|
|
|
|
2011-02-15 13:18:30 -08:00
|
|
|
<p>The introduction to <a href="#Lifecycle">Managing the Activity Lifecycle</a> briefly mentions
|
|
|
|
that
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
when an activity is paused or stopped, the state of the activity is retained. This is true because
|
|
|
|
the {@link android.app.Activity} object is still held in memory when it is paused or
|
|
|
|
stopped—all information about its members and current state is still alive. Thus, any changes
|
2011-12-29 11:28:38 -08:00
|
|
|
the user made within the activity are retained so that when the activity returns to the
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
foreground (when it "resumes"), those changes are still there.</p>
|
|
|
|
|
|
|
|
<p>However, when the system destroys an activity in order to recover memory, the {@link
|
|
|
|
android.app.Activity} object is destroyed, so the system cannot simply resume it with its state
|
|
|
|
intact. Instead, the system must recreate the {@link android.app.Activity} object if the user
|
|
|
|
navigates back to it. Yet, the user is unaware
|
|
|
|
that the system destroyed the activity and recreated it and, thus, probably
|
|
|
|
expects the activity to be exactly as it was. In this situation, you can ensure that
|
|
|
|
important information about the activity state is preserved by implementing an additional
|
2011-12-29 11:28:38 -08:00
|
|
|
callback method that allows you to save information about the state of your activity: {@link
|
|
|
|
android.app.Activity#onSaveInstanceState onSaveInstanceState()}.</p>
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
|
2011-12-29 11:28:38 -08:00
|
|
|
<p>The system calls {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
|
|
|
|
before making the activity vulnerable to destruction. The system passes this method
|
|
|
|
a {@link android.os.Bundle} in which you can save
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
state information about the activity as name-value pairs, using methods such as {@link
|
2011-12-29 11:28:38 -08:00
|
|
|
android.os.Bundle#putString putString()} and {@link
|
|
|
|
android.os.Bundle#putInt putInt()}. Then, if the system kills your application
|
|
|
|
process and the user navigates back to your activity, the system recreates the activity and passes
|
|
|
|
the {@link android.os.Bundle} to both {@link android.app.Activity#onCreate onCreate()} and {@link
|
|
|
|
android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}. Using either of these
|
|
|
|
methods, you can extract your saved state from the {@link android.os.Bundle} and restore the
|
|
|
|
activity state. If there is no state information to restore, then the {@link
|
|
|
|
android.os.Bundle} passed to you is null (which is the case when the activity is created for
|
|
|
|
the first time).</p>
|
|
|
|
|
|
|
|
<img src="{@docRoot}images/fundamentals/restore_instance.png" alt="" />
|
|
|
|
<p class="img-caption"><strong>Figure 2.</strong> The two ways in which an activity returns to user
|
|
|
|
focus with its state intact: either the activity is destroyed, then recreated and the activity must restore
|
|
|
|
the previously saved state, or the activity is stopped, then resumed and the activity state
|
|
|
|
remains intact.</p>
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
|
|
|
|
<p class="note"><strong>Note:</strong> There's no guarantee that {@link
|
|
|
|
android.app.Activity#onSaveInstanceState onSaveInstanceState()} will be called before your
|
|
|
|
activity is destroyed, because there are cases in which it won't be necessary to save the state
|
2012-01-31 19:14:35 -08:00
|
|
|
(such as when the user leaves your activity using the <em>Back</em> button, because the user is
|
|
|
|
explicitly
|
2011-12-29 11:28:38 -08:00
|
|
|
closing the activity). If the system calls {@link android.app.Activity#onSaveInstanceState
|
|
|
|
onSaveInstanceState()}, it does so before {@link
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
android.app.Activity#onStop onStop()} and possibly before {@link android.app.Activity#onPause
|
|
|
|
onPause()}.</p>
|
|
|
|
|
|
|
|
<p>However, even if you do nothing and do not implement {@link
|
|
|
|
android.app.Activity#onSaveInstanceState onSaveInstanceState()}, some of the activity state is
|
|
|
|
restored by the {@link android.app.Activity} class's default implementation of {@link
|
|
|
|
android.app.Activity#onSaveInstanceState onSaveInstanceState()}. Specifically, the default
|
2011-12-29 11:28:38 -08:00
|
|
|
implementation calls the corresponding {@link
|
|
|
|
android.view.View#onSaveInstanceState onSaveInstanceState()} method for every {@link
|
|
|
|
android.view.View} in the layout, which allows each view to provide information about itself
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
that should be saved. Almost every widget in the Android framework implements this method as
|
|
|
|
appropriate, such that any visible changes to the UI are automatically saved and restored when your
|
|
|
|
activity is recreated. For example, the {@link android.widget.EditText} widget saves any text
|
|
|
|
entered by the user and the {@link android.widget.CheckBox} widget saves whether it's checked or
|
|
|
|
not. The only work required by you is to provide a unique ID (with the <a
|
|
|
|
href="{@docRoot}guide/topics/resources/layout-resource.html#idvalue">{@code android:id}</a>
|
2011-12-29 11:28:38 -08:00
|
|
|
attribute) for each widget you want to save its state. If a widget does not have an ID, then the
|
|
|
|
system cannot save its state.</p>
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
|
|
|
|
<div class="sidebox-wrapper">
|
|
|
|
<div class="sidebox">
|
|
|
|
<p>You can also explicitly stop a view in your layout from saving its state by setting the
|
|
|
|
{@link android.R.attr#saveEnabled android:saveEnabled} attribute to {@code "false"} or by calling
|
|
|
|
the {@link android.view.View#setSaveEnabled setSaveEnabled()} method. Usually, you should not
|
|
|
|
disable this, but you might if you want to restore the state of the activity UI differently.</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<p>Although the default implementation of {@link
|
|
|
|
android.app.Activity#onSaveInstanceState onSaveInstanceState()} saves useful information about
|
|
|
|
your activity's UI, you still might need to override it to save additional information.
|
|
|
|
For example, you might need to save member values that changed during the activity's life (which
|
|
|
|
might correlate to values restored in the UI, but the members that hold those UI values are not
|
|
|
|
restored, by default).</p>
|
|
|
|
|
|
|
|
<p>Because the default implementation of {@link
|
|
|
|
android.app.Activity#onSaveInstanceState onSaveInstanceState()} helps save the state of the UI, if
|
|
|
|
you override the method in order to save additional state information, you should always call the
|
|
|
|
superclass implementation of {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
|
2013-01-11 22:31:43 -08:00
|
|
|
before doing any work. Likewise, you should also call the superclass implementation of {@link
|
2011-12-29 11:28:38 -08:00
|
|
|
android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} if you override it, so the
|
|
|
|
default implementation can restore view states.</p>
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
|
|
|
|
<p class="note"><strong>Note:</strong> Because {@link android.app.Activity#onSaveInstanceState
|
|
|
|
onSaveInstanceState()} is not guaranteed
|
|
|
|
to be called, you should use it only to record the transient state of the activity (the state of
|
|
|
|
the UI)—you should never use it to store persistent data. Instead, you should use {@link
|
|
|
|
android.app.Activity#onPause onPause()} to store persistent data (such as data that should be saved
|
|
|
|
to a database) when the user leaves the activity.</p>
|
|
|
|
|
|
|
|
<p>A good way to test your application's ability to restore its state is to simply rotate the
|
|
|
|
device so that the screen orientation changes. When the screen orientation changes, the system
|
|
|
|
destroys and recreates the activity in order to apply alternative resources that might be available
|
2011-12-29 11:28:38 -08:00
|
|
|
for the new screen configuration. For this reason alone, it's very important that your activity
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
completely restores its state when it is recreated, because users regularly rotate the screen while
|
|
|
|
using applications.</p>
|
|
|
|
|
|
|
|
|
|
|
|
<h3 id="ConfigurationChanges">Handling configuration changes</h3>
|
|
|
|
|
|
|
|
<p>Some device configurations can change during runtime (such as screen orientation, keyboard
|
2011-12-29 11:28:38 -08:00
|
|
|
availability, and language). When such a change occurs, Android recreates the running activity
|
|
|
|
(the system calls {@link android.app.Activity#onDestroy}, then immediately calls {@link
|
|
|
|
android.app.Activity#onCreate onCreate()}). This behavior is
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
designed to help your application adapt to new configurations by automatically reloading your
|
2011-12-29 11:28:38 -08:00
|
|
|
application with alternative resources that you've provided (such as different layouts for
|
|
|
|
different screen orientations and sizes).</p>
|
|
|
|
|
|
|
|
<p>If you properly design your activity to handle a restart due to a screen orientation change and
|
|
|
|
restore the activity state as described above, your application will be more resilient to other
|
|
|
|
unexpected events in the activity lifecycle.</p>
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
|
2011-12-29 11:28:38 -08:00
|
|
|
<p>The best way to handle such a restart is
|
|
|
|
to save and restore the state of your activity using {@link
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
android.app.Activity#onSaveInstanceState onSaveInstanceState()} and {@link
|
|
|
|
android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} (or {@link
|
|
|
|
android.app.Activity#onCreate onCreate()}), as discussed in the previous section.</p>
|
|
|
|
|
2011-12-29 11:28:38 -08:00
|
|
|
<p>For more information about configuration changes that happen at runtime and how you can handle
|
|
|
|
them, read the guide to <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Handling
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
Runtime Changes</a>.</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h3 id="CoordinatingActivities">Coordinating activities</h3>
|
|
|
|
|
|
|
|
<p>When one activity starts another, they both experience lifecycle transitions. The first activity
|
|
|
|
pauses and stops (though, it won't stop if it's still visible in the background), while the other
|
|
|
|
activity is created. In case these activities share data saved to disc or elsewhere, it's important
|
|
|
|
to understand that the first activity is not completely stopped before the second one is created.
|
|
|
|
Rather, the process of starting the second one overlaps with the process of stopping the first
|
|
|
|
one.</p>
|
|
|
|
|
|
|
|
<p>The order of lifecycle callbacks is well defined, particularly when the two activities are in the
|
|
|
|
same process and one is starting the other. Here's the order of operations that occur when Activity
|
|
|
|
A starts Acivity B: </p>
|
|
|
|
|
|
|
|
<ol>
|
|
|
|
<li>Activity A's {@link android.app.Activity#onPause onPause()} method executes.</li>
|
|
|
|
|
|
|
|
<li>Activity B's {@link android.app.Activity#onCreate onCreate()}, {@link
|
|
|
|
android.app.Activity#onStart onStart()}, and {@link android.app.Activity#onResume onResume()}
|
|
|
|
methods execute in sequence. (Activity B now has user focus.)</li>
|
|
|
|
|
|
|
|
<li>Then, if Activity A is no longer visible on screen, its {@link
|
|
|
|
android.app.Activity#onStop onStop()} method executes.</li>
|
|
|
|
</ol>
|
|
|
|
|
|
|
|
<p>This predictable sequence of lifecycle callbacks allows you to manage the transition of
|
|
|
|
information from one activity to another. For example, if you must write to a database when the
|
|
|
|
first activity stops so that the following activity can read it, then you should write to the
|
|
|
|
database during {@link android.app.Activity#onPause onPause()} instead of during {@link
|
|
|
|
android.app.Activity#onStop onStop()}.</p>
|
|
|
|
|
2011-02-08 14:05:54 -08:00
|
|
|
<!--
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
<h2>Beginner's Path</h2>
|
|
|
|
|
|
|
|
<p>For more information about how Android maintains a history of activities and
|
|
|
|
enables user multitasking, continue with the <b><a
|
2012-06-21 17:14:39 -07:00
|
|
|
href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back
|
docs: Rewrite of App Fundamentals.. Part 1.
This introduces two new docs:
Activities
Provides a fundamental introduction to how activities work, including
the basics about layout, manifest entries, starting activies, getting results,
and the complete discussion about the lifecycle (which used to be in the
fundamentals.jd document under "Component Lifecycles"), but also now includes more
information about saving instance state (with new diagrams).
Tasks and Back Stack
A large expansion of the material originally presented in the fundamentals.jd
document under "Activities and Tasks". This doc talks all about how tasks and
the back stack work. This content re-organization is important because fragments
can now become a part of the back stack (which is a task-oriented concept), thus,
it's important to separate the task ideas from being tied directly to activities only,
which is how tasks are currently discussed. However, fragments are not yet discussed
here in detail---that will come later when the fragment dev guide is introduced.
Change-Id: I46425b5c2c3b928dc81bafd05a88ad3ea1c5be53
2010-10-04 16:03:15 -07:00
|
|
|
Stack</a></b> document.</p>
|
2013-01-11 22:31:43 -08:00
|
|
|
-->
|