文章目录
Intro
本文提供一个测试类通过打印的方式展示在多个Activity之间互相跳转的时候,各个Activity的生命周期相关方法的执行顺序。
生命周期方法 & 执行顺序结论
下图出自 郭霖 《第一行代码(第二版)》
上面的图,其实不太好记。
下表用分组的方式,做一个分类:
分组依据 | 生命周期方法 | 意味着什么? |
---|---|---|
页面是否存在?是 | onCreate | 页面(Activity)被创建 |
页面是否存在?否 | onDestroy | 页面即将被销毁 |
页面是否可见?是 | onStart | 页面在屏幕上可见 |
页面是否可见?否 | onStop | 页面在屏幕上不可见 |
页面是否正在运行?是 | onResume | 页面在屏幕上开始运行 |
页面是否正在运行?否 | onPause | 页面在屏幕上暂停运行 |
NA | onRetest | 页面在屏幕上重新可见 |
NA | onSaveInstanceState | 页面销毁之前,先保存一些本页面的数据 |
再来看执行顺序(最基本的三对/六个):
- onCreate
- onStart
- onResume
- onPause
- onStop
- onDestroy
code
java
package cn.wuyujin.firstactivity;
import android.os.Build;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.gson.Gson;
import java.time.LocalTime;
import cn.wuyujin.firstactivity.util.ActivityController;
public class BaseActivity extends AppCompatActivity {
private static final String TAG = "BaseActivity";
private final String clsName = this.getClass().getName();
private Gson gson = new Gson();
private String key = "aaaaa";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String oldValue = "null";
if (null != savedInstanceState) {
oldValue = savedInstanceState.getString(key);
}
Log.d(TAG, clsName + " 被创建 onCreate " + oldValue);
// ActivityController.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, clsName + " 被销毁 onDestroy");
ActivityController.removeActivity(this);
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, clsName + " 被显示在屏幕 onStart");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, clsName + " 不在屏幕上显示了(被盖住了) onStop");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, clsName + " 开始运行了 onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, clsName + " 暂停运行 onPause");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, clsName + " 重新开始显示在屏幕上 onRestart");
}
// @Override
// protected void onSaveInstanceState(@NonNull Bundle outState) {
// super.onSaveInstanceState(outState);
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// outState.putString(key, String.format("%s %s_%s ", outState.getString(key), clsName, LocalTime.now().toString()));
// }
// Log.d(TAG, clsName + " 销毁前先保存点数据 onSaveInstanceState " + gson.toJson(outState.getString(key)));
// }
}