赞
踩
本文提供一个测试类通过打印的方式展示在多个Activity之间互相跳转的时候,各个Activity的生命周期相关方法的执行顺序。
下图出自 郭霖 《第一行代码(第二版)》
上面的图,其实不太好记。
下表用分组的方式,做一个分类:
分组依据 | 生命周期方法 | 意味着什么? |
---|---|---|
页面是否存在?是 | onCreate | 页面(Activity)被创建 |
页面是否存在?否 | onDestroy | 页面即将被销毁 |
页面是否可见?是 | onStart | 页面在屏幕上可见 |
页面是否可见?否 | onStop | 页面在屏幕上不可见 |
页面是否正在运行?是 | onResume | 页面在屏幕上开始运行 |
页面是否正在运行?否 | onPause | 页面在屏幕上暂停运行 |
NA | onRetest | 页面在屏幕上重新可见 |
NA | onSaveInstanceState | 页面销毁之前,先保存一些本页面的数据 |
再来看执行顺序(最基本的三对/六个):
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))); // } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。