文章目录
- Intro
- 生命周期方法 & 执行顺序结论
- code
Intro
本文提供一个测试类通过打印的方式展示在多个Activity之间互相跳转的时候,各个Activity的生命周期相关方法的执行顺序。
生命周期方法 & 执行顺序结论
下图出自 郭霖 《第一行代码(第二版)》
上面的图,其实不太好记。
下表用分组的方式,做一个分类:
分组依据 | 生命周期方法 | 意味着什么? |
---|---|---|
页面是否存在?是 | onCreate | 页面(Activity)被创建 |
页面是否存在?否 | onDestroy | 页面即将被销毁 |
页面是否可见?是 | onStart | 页面在屏幕上可见 |
页面是否可见?否 | onStop | 页面在屏幕上不可见 |
页面是否正在运行?是 | onResume | 页面在屏幕上开始运行 |
页面是否正在运行?否 | onPause | 页面在屏幕上暂停运行 |
NA | onRetest | 页面在屏幕上重新可见 |
NA | onSaveInstanceState | 页面销毁之前,先保存一些本页面的数据 |
再来看执行顺序(最基本的三对/六个):
- onCreate
- onStart
- onResume
- onPause
- onStop
- onDestroy
code
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";@Overrideprotected 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);}@Overrideprotected void onDestroy() {super.onDestroy();Log.d(TAG, clsName + " 被销毁 onDestroy");ActivityController.removeActivity(this);}@Overrideprotected void onStart() {super.onStart();Log.d(TAG, clsName + " 被显示在屏幕 onStart");}@Overrideprotected void onStop() {super.onStop();Log.d(TAG, clsName + " 不在屏幕上显示了(被盖住了) onStop");}@Overrideprotected void onResume() {super.onResume();Log.d(TAG, clsName + " 开始运行了 onResume");}@Overrideprotected void onPause() {super.onPause();Log.d(TAG, clsName + " 暂停运行 onPause");}@Overrideprotected 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)));
// }
}