Home > Programming / tutorials > Android Activity Life Cycle

Android Activity Life Cycle

January 13th, 2011 Leave a comment Go to comments

Let us understand the activity life cycle in android application . Activities in the system are managed as an activity stack. When a new activity is started, it is placed on the top of the stack and becomes the running activity — the previous activity always remains below it in the stack, and will not come to the foreground again until the new activity exits.

An activity has essentially four states:

  • If an activity in the foreground of the screen (at the top of the stack), it is active or running.
  • If an activity has lost focus but is still visible (that is, a new non-full-sized or transparent activity has focus on top of your activity), it is paused. A paused activity is completely alive (it maintains all state and member information and remains attached to the window manager), but can be killed by the system in extreme low memory situations.
  • If an activity is completely obscured by another activity, it is stopped. It still retains all state and member information, however, it is no longer visible to the user so its window is hidden and it will often be killed by the system when memory is needed elsewhere.
  • If an activity is paused or stopped, the system can drop the activity from memory by either asking it to finish, or simply killing its process. When it is displayed again to the user, it must be completely restarted and restored to its previous state.

The following diagram shows the important state paths of an Activity. The square rectangles represent callback methods you can implement to perform operations when the Activity moves between states. The colored ovals are major states the Activity can be in.

There are three key loops you may be interested in monitoring within your activity:

  • The entire lifetime of an activity happens between the first call to onCreate(Bundle) through to a single final call to onDestroy(). An activity will do all setup of “global” state in onCreate(), and release all remaining resources in onDestroy(). For example, if it has a thread running in the background to download data from the network, it may create that thread in onCreate() and then stop the thread in onDestroy().
  • The visible lifetime of an activity happens between a call to onStart() until a corresponding call to onStop(). During this time the user can see the activity on-screen, though it may not be in the foreground and interacting with the user. Between these two methods you can maintain resources that are needed to show the activity to the user. For example, you can register a BroadcastReceiver in onStart() to monitor for changes that impact your UI, and unregister it in onStop() when the user an no longer see what you are displaying. The onStart() and onStop() methods can be called multiple times, as the activity becomes visible and hidden to the user.
  • The foreground lifetime of an activity happens between a call to onResume() until a corresponding call to onPause(). During this time the activity is in front of all other activities and interacting with the user. An activity can frequently go between the resumed and paused states — for example when the device goes to sleep, when an activity result is delivered, when a new intent is delivered — so the code in these methods should be fairly lightweight.

The entire lifecycle of an activity is defined by the following Activity methods. All of these are hooks that you can override to do appropriate work when the activity changes state. All activities will implement onCreate(Bundle) to do their initial setup; many will also implement onPause() to commit changes to data and otherwise prepare to stop interacting with the user. You should always call up to your superclass when implementing these methods.

 public class Activity extends ApplicationContext {
     protected void onCreate(Bundle savedInstanceState);

     protected void onStart();

     protected void onRestart();

     protected void onResume();

     protected void onPause();

     protected void onStop();

     protected void onDestroy();

Here is a short tutorial for explaining android activity life cycle ..

1.  Download source code from this site
2. go File ->Import and select unzip version of source code folder .
3. Run and see at LogCat different states of your TestActivity .

If you do not how to use logCat, in last post we have covered running logcat and viewing states in android.

Code Example

package com.biplob.TestActivity;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class TestActivity extends Activity {
/** Called when the activity is first created. */

private final static String TAG=”TestActivity”;

public void onCreate(Bundle savedInstanceState) {

Log.i(TAG,”On Create”);
/* (non-Javadoc)
* @see android.app.Activity#onDestroy()
protected void onDestroy() {
// TODO Auto-generated method stub

Log.i(TAG,”On Destroy”);
/* (non-Javadoc)
* @see android.app.Activity#onPause()
protected void onPause() {
// TODO Auto-generated method stub
Log.i(TAG,”On Pause”);

/* (non-Javadoc)
* @see android.app.Activity#onRestart()
protected void onRestart() {
// TODO Auto-generated method stub
Log.i(TAG,”On Restart”);

/* (non-Javadoc)
* @see android.app.Activity#onResume()
protected void onResume() {
// TODO Auto-generated method stub
Log.i(TAG,”On Resume”);

/* (non-Javadoc)
* @see android.app.Activity#onStart()
protected void onStart() {
// TODO Auto-generated method stub
Log.i(TAG,”On Start”);
/* (non-Javadoc)
* @see android.app.Activity#onStop()
protected void onStop() {
// TODO Auto-generated method stub
Log.i(TAG,”On Stop”);

Unzip TestActivity project and import from eclipse(select File->Import …

Select Existing projects into workspace and click next button

Click on Browse button and give the path of TestActivity project folder.

Click Finish  and now run it. Wait a moment ….You will get the following screen.

To see logcat message click DDMS from right top of eclipse click LogCat View .

You will get a screen like this.

In the next post , we will talk about exception handling in Android

  1. November 28th, 2012 at 05:25 | #1

    Thanks for this tutorial, it’s very easy to understand

  2. July 4th, 2012 at 02:06 | #2

    it is very useful post for beginners.
    in my view it is complete tutorial of android life cycle.

  3. Amit
    May 28th, 2012 at 05:37 | #3

    Thanks for such a nice tutorial and explanation, However I want to know When OnFinish() is called ?

  1. January 13th, 2011 at 22:42 | #1