Android Activity LifeCycle 解释

假设具有 MainActivity 的应用程序可以使用按钮单击调用 Next Activity。

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);
    } }

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");
    } }

在首次创建应用程序
d / MainActivity:从主叫 MainActivity 的 onCreate
d / MainActivity:从主叫 MainActivity 调用 onStart
d / MainActivity:调用从 MainActivity 的 onResume
被称为

当屏幕休眠时
08:11:03.142 D / MainActivity:从 MainActivity
08:11:03.192 调用 onPause D / MainActivity:调用从 MainActivity 调用 onStop
。当它醒来时再次唤醒
08:11:55.922 D / MainActivity:从 MainActivity
08:11:55.962 调用 onRestart D / MainActivity:从 MainActivity
08:11:55.962 调用 onStart D / MainActivity:从 MainActivity 调用 onResume
被调用

Case1: 从 Main Activity
D / MainActivity 调用 Next Activity 时:调用 Next Activity
D / MainActivity:从 MainActivity 调用 onPause
D / NextActivity:从 Next Activity 调用 onCreate
D / NextActivity:从 Next Activity 调用 onStart
D / NextActivity:调用 onResume 来自下一个活动
D / MainActivity:从 MainActivity 调用 onStop

使用后退按钮
D / NextActivity 从 Next Activity 返回主 Activity 时 :从 Next Activity
D / MainActivity 调用 onPause :从 MainActivity
D / MainActivity 调用 onRestart:从 MainActivity D / MainActivity 调用 onStart
:从 MainActivity
D / NextActivity 调用 onResume :从 Next Activity
D / NextActivity 调用 onStop:从 Next Activity 调用 onDestroy

案例 2: 当活动被部分遮挡时(当按下概览按钮时)或当应用程序转到后台并且另一个应用程序完全遮盖它时
D / MainActivity:从 MainActivity
D / MainActivity 调用 onPause:从 MainActivity 调用 onStop
并且当应用程序返回到前台准备接受用户输入,
D / MainActivity:从 MainActivity
D / MainActivity 调用 onRestart:从 MainActivity 调用 onStart
D / MainActivity:从 MainActivity 调用 onResume
被调用

情况 3: 调用活动以实现隐式意图并且用户进行选择时。例如,当按下共享按钮并且用户必须从显示的应用程序列表中选择一个应用程序
D / MainActivity:从 MainActivity 调用 onPause

活动现在可见,但现在不活跃。选择完成且 app 处于活动状态时
D / MainActivity:调用 MainActivity
中的 onResume

案例 4:
当应用程序在后台被杀死(为另一个前台应用程序释放资源)时, onPause (用于预蜂窝设备)或 onStop (用于自蜂窝设备)将是应用程序终止之前调用的最后一个。

每次运行应用程序时,都会调用 onCreate 和 onDestroy。但 onPause,onStop,onRestart,onStart,onResume 可能在生命周期中被多次调用。