Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What methods are invoked in the Activity Lifecycle in the following cases:

Let's say I have a Hello World single Activity application. I start this application.

What methods are invoked in each case:

  • Home button is pressed: ?
    Back button is pressed: ?
    Phone call is received: ?

What methods are invoked once the user starts the application again via the app icon (assuming the OS hasn't had a "other apps need memory condition"):

  • Home button was pressed: ?
    Back button was pressed: ?
    Phone call was received: ?

Thanks all.

Edit: Extra Credit: How can the user invoke onPause without invoking onStop?

like image 545
user432209 Avatar asked Feb 16 '11 17:02

user432209


People also ask

Which method of activity is invoked immediately on Back button pressed event of the Android phone?

If the activity comes back, the system invokes onRestart() . If the Activity is finished running, the system calls onDestroy() .

Which is the next activity lifecycle method to be invoked after onRestart ()?

onStart(): This method gets called when the activity has started after creating. This method is called after onCreate() method if the Activity is just created or it can be called after onRestart() method if the Activity is restarting again from stopped state.


2 Answers

For understand ACTIVITY LIFECYCLE i create the demo See HERE

And different case study i added.

MainActivity.java

    public class MainActivity extends AppCompatActivity {

    private static final String TAG = "State changed";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.i(TAG, "onCreate: ");
    }

    public void OpenDialog(View view) {

        final AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); //Read Update
        alertDialog.setTitle("hi");
        alertDialog.setMessage("this is my app");

        alertDialog.setButton("Continue..", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // here you can add functions
                alertDialog.dismiss();
            }
        });

        alertDialog.show();  //<-- Show dialog
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart: " );
    }

    @Override
    protected void onResume() {
        super.onResume();

        Log.i(TAG, "onResume: ");

    }

    @Override
    protected void onPause() {
        super.onPause();

        Log.i(TAG, "onPause: ");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop: ");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "onRestart: ");
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.i(TAG, "onSaveInstanceState: ");
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.i(TAG, "onRestoreInstanceState: ");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy: ");
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Log.i(TAG, "onBackPressed: ");
    }

}

Case Study

Case 1 = First click the app icon

Note : here does not show the onRestoreInstanceState because it execute on runtime

I/State changed: onCreate:

I/State changed: onStart:

I/State changed: onResume:

Case 2 = Click Home Button (same happended when screen light off or coming call)

I/State changed: onPause:

I/State changed: onSaveInstanceState:

I/State changed: onStop:

Case 3 = (case 2 continue) Open App via Recent

I/State changed: onRestart:

I/State changed: onStart:

I/State changed: onResume:

Case 4 = Click Back button (onBackPressed method call)

I/State changed: onPause:

I/State changed: onStop:

I/State changed: onDestroy:

Case 5 = Configration Change (Rotate the screen)

I/State changed: onPause:

I/State changed: onSaveInstanceState:

I/State changed: onStop:

I/State changed: onDestroy:

I/State changed: onCreate:

I/State changed: onStart:

I/State changed: onRestoreInstanceState:

I/State changed: onResume:

like image 193
Arpit Patel Avatar answered Sep 28 '22 06:09

Arpit Patel


both pressing home button and receiving a call don't remove the activity from the task's stack, and will be available when you re-enter the app => onPause() => onStop().

as the activity lifecycle diagram shows, re-entering the app calls => onRestart() => onStart() => onResume()

pressing the back button instead kills the activity => onPause() => onStop() => onDestroy()

re-entering the app in this case calls the classics => onCreate() => onStart() => onResume()

EDIT

from http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

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.

like image 20
bigstones Avatar answered Sep 28 '22 07:09

bigstones