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

前端 未结 4 1210
夕颜
夕颜 2020-12-13 11:15

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:
相关标签:
4条回答
  • 2020-12-13 11:29

    Well see, while a sequence of events may occur with your hello world program, the same sequence may not occur in say a video game, because Android will probably Destroy it for taking up too much resources.

    The best way I have found to see the lifecycle for my app is to override all the methods (onStart, onRestart,..., including the onSaveInstance and onRestoreInstance) and insert log statements in each one. Like so:

    @Override
    public void onDestroy() {
        // Call the super class 
        super.onDestroy();
        // Log the action
        Log.d("Debug", "onDestroy() has been called!");
    }
    

    Now I can go to logcat and see what events took place.

    0 讨论(0)
  • 2020-12-13 11:41

    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.

    0 讨论(0)
  • 2020-12-13 11:43

    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:

    0 讨论(0)
  • 2020-12-13 11:43

    There can be several scenarios

    1. Opening the app from the app icon. following methods are called

      onCreate()-->onStart()-->onResume()

    2. When user presses the home button

      onPause()-->onStop()

    3. When user returns to the app from the Activity Stack

      onRestart()-->onStart()--> onResume()

    4. When the app is running and user presses the power button

      onPause()-->onStop()

    5. When user unlocks the phone

      onRestart()-->onStart()--> onResume()

    6. When user gets an incoming call while you are in the app

      onPause()

    7. When user returns to the app after disconnecting the phone call

      onResume()

    8. When user presses the back button from the app

      onPause()-->onStop()-->onDestroy()

    9. And when the user presses the home button and from the activity stack user swipes the app.onDestroy() method may or may not be called depending upon the OS contains the context of the Activity or not according to memory requirements
    0 讨论(0)
提交回复
热议问题