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 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 View
and ViewGroup
classes (or existing subclasses) to create your own widgets and layouts and apply them to your activity layout.
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 UI. The android:name
attribute is the only required attribute—it specifies the class name of the activity.
An <activity>
element can also specify various intent filters—using the <intent-filter>
element—in order to declare how other application components may activate it.
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.
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).
Explicityly start a service(using className)
Intent intent = new Intent(this, SignInActivity.class); startActivity(intent);
Implicitly start a service(using a intent, this is powerful, the system will find the activity for you)
For example, if you want to allow the user to send an email message, you can create the following intent:
Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_EMAIL, recipientArray); startActivity(intent);
if we wan to receive a result from the activity that we start, we should use startActivityForResult(). then we should override the callback method onActivityResult() to read the results.
You can shut down an activity by calling its finish()
method. You can also shut down a separate activity that you previously started by calling finishActivity()
.
An activity can exist in essentially three states:
-
Resumed
- The activity is in the foreground of the screen and has user focus. (This state is also sometimes referred to as "running".) Paused
-
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
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.
Stopped
The activity is completely obscured by another activity (the activity is now in the "background"). A stopped activity is also still alive (the Activity
object is retained in memory, it maintains all state and member information, but is not 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.
- The entire lifetime of an activity happens between the call to
onCreate()
and the call toonDestroy()
. Your activity should perform setup of "global" state (such as defining layout) inonCreate()
, and release all remaining resources inonDestroy()
. For example, if your activity has a thread running in the background to download data from the network, it might create that thread inonCreate()
and then stop the thread inonDestroy()
. The visible lifetime of an activity happens between the call to
onStart()
and the call toonStop()
. During this time, the user can see the activity on-screen and interact with it. For example,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 aBroadcastReceiver
inonStart()
to monitor changes that impact your UI, and unregister it inonStop()
when the user can no longer see what you are displaying. The system might callonStart()
andonStop()
multiple times during the entire lifetime of the activity, as the activity alternates between being visible and hidden to the user.The foreground lifetime of an activity happens between the call to
onResume()
and the call toonPause()
. 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,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.(
onPause()
,onStop()
, andonDestroy()
). BecauseonPause()
is the first of the three, once the activity is created,onPause()
is the last method that's guaranteed to be called before the processcan be killed—if the system must recover memory in an emergency, thenonStop()
andonDestroy()
might not be called. Therefore, you should useonPause()
to write crucial persistent data (such as user edits) to storage. However, you should be selective about what information must be retained duringonPause()
, because any blocking procedures in this method block the transition to the next activity and slow the user experience.In this situation, you can ensure that important information about the activity state is preserved by implementing an additional callback method that allows you to save information about the state of your activity:
onSaveInstanceState()
.The system calls
onSaveInstanceState()
before making the activity vulnerable to destruction. The system passes this method aBundle
in which you can save state information about the activity as name-value pairs, using methods such asputString()
andputInt()
. Then, if the system kills your application process and the user navigates back to your activity, the system recreates the activity and passes theBundle
to bothonCreate()
andonRestoreInstanceState()
. Using either of these methods, you can extract your saved state from theBundle
and restore the activity state. If there is no state information to restore, then theBundle
passed to you is null (which is the case when the activity is created for the first time).Some device configurations can change during runtime (such as screen orientation, keyboard availability, and language). When such a change occurs, Android recreates the running activity (the system calls
onDestroy()
, then immediately callsonCreate()
).The best way to handle such a restart is to save and restore the state of your activity using
onSaveInstanceState()
andonRestoreInstanceState()
(oronCreate()
), as discussed in the previous section.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:
- Activity A's
onPause()
method executes. - Activity B's
onCreate()
,onStart()
, andonResume()
methods execute in sequence. (Activity B now has user focus.) - Then, if Activity A is no longer visible on screen, its
onStop()
method executes.
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
onPause()
instead of duringonStop()
.That's the activity B's creation is between the onPause and onStop of activity of A.
Note: Because
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 useonPause()
to store persistent data (such as data that should be saved to a database) when the user leaves the activity.- Activity A's