Android Activity LifeCycle Explained

suggest change

Assume an application with a MainActivity which can call the Next Activity using a button click.

public class MainActivity extends AppCompatActivity {

    private final String LOG_TAG = MainActivity.class.getSimpleName();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(LOG_TAG, "calling onCreate from MainActivity");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(LOG_TAG, "calling onStart from MainActivity");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(LOG_TAG, "calling onResume  from MainActivity");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(LOG_TAG, "calling onPause  from MainActivity");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(LOG_TAG, "calling onStop  from MainActivity");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(LOG_TAG, "calling onDestroy  from MainActivity");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(LOG_TAG, "calling onRestart  from MainActivity");
    }
    public void toNextActivity(){
        Log.d(LOG_TAG, "calling Next Activity");
        Intent intent = new Intent(this, NextActivity.class);
        startActivity(intent);
    } }

and

public class NextActivity extends AppCompatActivity {
    private final String LOG_TAG = NextActivity.class.getSimpleName();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_next);
        Log.d(LOG_TAG, "calling onCreate from Next Activity");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(LOG_TAG, "calling onStart from Next Activity");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(LOG_TAG, "calling onResume  from Next Activity");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(LOG_TAG, "calling onPause  from Next Activity");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(LOG_TAG, "calling onStop  from Next Activity");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(LOG_TAG, "calling onDestroy  from Next Activity");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(LOG_TAG, "calling onRestart  from Next Activity");
    } }

When app is first created

D/MainActivity: calling onCreate from MainActivity

D/MainActivity: calling onStart from MainActivity

D/MainActivity: calling onResume from MainActivity

are called

When screen sleeps

08:11:03.142 D/MainActivity: calling onPause from MainActivity

08:11:03.192 D/MainActivity: calling onStop from MainActivity

are called. And again when it wakes up

08:11:55.922 D/MainActivity: calling onRestart from MainActivity

08:11:55.962 D/MainActivity: calling onStart from MainActivity

08:11:55.962 D/MainActivity: calling onResume from MainActivity

are called

Case1: When Next Activity is called from Main Activity

D/MainActivity: calling Next Activity

D/MainActivity: calling onPause from MainActivity

D/NextActivity: calling onCreate from Next Activity

D/NextActivity: calling onStart from Next Activity

D/NextActivity: calling onResume from Next Activity

D/MainActivity: calling onStop from MainActivity

When Returning back to the Main Activity from Next Activity using back button

D/NextActivity: calling onPause from Next Activity

D/MainActivity: calling onRestart from MainActivity

D/MainActivity: calling onStart from MainActivity

D/MainActivity: calling onResume from MainActivity

D/NextActivity: calling onStop from Next Activity

D/NextActivity: calling onDestroy from Next Activity

Case2: When Activity is partially obscured (When overview button is pressed) or When app goes to background and another app completely obscures it

D/MainActivity: calling onPause from MainActivity

D/MainActivity: calling onStop from MainActivity

and when the app is back in the foreground ready to accept User inputs,

D/MainActivity: calling onRestart from MainActivity

D/MainActivity: calling onStart from MainActivity

D/MainActivity: calling onResume from MainActivity

are called

Case3: When an activity is called to fulfill implicit intent and user has make a selection. For eg., when share button is pressed and user has to select an app from the list of applications shown

D/MainActivity: calling onPause from MainActivity

The activity is visible but not active now. When the selection is done and app is active

D/MainActivity: calling onResume from MainActivity

is called

Case4:

When the app is killed in the background(to free resources for another foreground app), onPause(for pre-honeycomb device) or onStop(for since honeycomb device) will be the last to be called before the app is terminated.

onCreate and onDestroy will be called utmost once each time the application is run. But the onPause, onStop, onRestart, onStart, onResume maybe called many times during the lifecycle.

Feedback about page:

Feedback:
Optional: your email if you want me to get back to you:



Table Of Contents