非常核心和重要的图,刻在脑子里

Resume [rɪˈzjuːm] (中断后)重新开始
Activity 从创建到销毁,历经 “初始化→可见→可交互→部分可见→不可见→销毁” 过程,对应 6 个核心回调:
当一个 Activity 失去焦点时,系统会调用它的 onPause 方法。此时 Activity 只是部分被遮挡,比如出现一个对话框覆盖在当前 Activity 部分区域 ,或者启动了一个透明主题的 Activity 覆盖在当前 Activity 之上,这种情况下当前 Activity 仍然是部分可见的。
应用从「部分可见」或「暂时被打断」的状态回到了「前台可见且可交互」的状态
意味着应用从「部分可见」进一步变为「完全不可见」,但尚未被销毁。
只有当 Activity 完全不可见时,系统才会调用其 onStop 方法。常见的触发场景包括:
onStop 状态。onStop 状态onRestart() 的转换触发场景:用户回到已停止的 Activity
Activity A → 启动 Activity B(A 进入 onStop()) → 按返回键回到 A → A 执行 onRestart() → onStart() → onResume()。
App process killed** 的转换触发场景:系统因内存不足强制销毁 Activity 进程。
转换路径 | 触发条件 | 后续恢复流程 | 数据保留情况 |
|---|---|---|---|
onStop() → onRestart() | 用户主动切回(未被系统销毁) | onRestart() → onStart() → onResume() | 数据 / 状态可保留(未销毁) |
onStop() → App process killed | 系统因内存不足强制回收 | 下次启动需重新 onCreate() | 数据需依赖 onSaveInstanceState() 恢复 |
释放所有Activity所有资源
Activity 生命周期分的这么细,就是方便我们开发者在不同阶段精准控制 Activity 行为,通过覆盖这些方法,能清晰把控页面从生到死的每一步,解决初始化、资源管理、状态恢复等核心问题 。
看一下跳转页面生命周期发生了怎样的变化
设置点击事件,重写周期方法,打印日志;
public class LifeCycleActivity extends AppCompatActivity {
private static final String TAG = "LifeCycleActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_life_cycle);
Log.i(TAG, "onCreate: " + TAG + "已创建");
findViewById(R.id.tv_label).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(LifeCycleActivity.this ,SecondLifeActivity.class);
startActivity(intent);
}
});
}
/**
* 已开始:Activity会进入到前台
*/
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, TAG + " onStart: 已开始");
}
/**
* 已恢复:可以和用户进行交互
*/
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, TAG + " onResume: 已恢复");
}
/**
* 已暂停:不是被销毁,只是暂时离开Activity
*/
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, TAG + " onPause: 已暂停");
}
/**
* 已停止:Activity页面不会被附加到窗口管理当中,但是Activity本身的一些成员变量、状态还会存在
*/
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, TAG + " onStop: 已停止");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, TAG + " onRestart: 准备重新触发onStart");
}
/**
* Activity被销毁之前,会调用这个方法
*/
@Override
protected void onDestroy(){
super.onDestroy();
Log.i(TAG, TAG + " onDestroy: 准备销毁当前页面!");
}
}布局

public class SecondLifeActivity extends AppCompatActivity {
private static final String TAG = "SecondLifeActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second_life);
Log.i(TAG, TAG + " SecondLifeActivity onCreate: 已经创建");
}
/**
* 已开始:Activity会进入到前台
*/
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, TAG + " onStart: 已开始");
}
/**
* 已恢复:可以和用户进行交互
*/
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, TAG + " onResume: 已恢复");
}
/**
* 已暂停:不是被销毁,只是暂时离开Activity
*/
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, TAG + " onPause: 已暂停");
}
/**
* 已停止:Activity页面不会被附加到窗口管理当中,但是Activity本身的一些成员变量、状态还会存在
*/
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, TAG + " onStop: 已停止");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, TAG + " onRestart: 准备重新触发onStart");
}
/**
* Activity被销毁之前,会调用这个方法
*/
@Override
protected void onDestroy(){
super.onDestroy();
Log.i(TAG, TAG + " onDestroy: 准备销毁当前页面!");
}
}布局如下

结果如下
