安卓 Android Activity 生命周期

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

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

相关推荐

  1. aab文件生成apk文件

    2024-03-22 14:44:03       30 阅读
  2. adb【备忘录】

    2024-03-22 14:44:03       61 阅读
  3. apk逆向

    2024-03-22 14:44:03       72 阅读
  4. 入门手册

    2024-03-22 14:44:03       42 阅读
  5. adb

    2024-03-22 14:44:03       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-22 14:44:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-22 14:44:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-22 14:44:03       82 阅读
  4. Python语言-面向对象

    2024-03-22 14:44:03       91 阅读

热门阅读

  1. 【Python】Python中装饰器和魔法方法的区别

    2024-03-22 14:44:03       47 阅读
  2. harmonyos:Socket连接

    2024-03-22 14:44:03       38 阅读
  3. 计算机常见的知识点(1)

    2024-03-22 14:44:03       51 阅读
  4. 机器学习——坐标轴下降法和梯度下降法

    2024-03-22 14:44:03       43 阅读
  5. 3. C++ 常见的段错误及对策

    2024-03-22 14:44:03       38 阅读
  6. 05|输出解析:用OutputParser生成鲜花推荐列表

    2024-03-22 14:44:03       39 阅读
  7. 基于spring boot实现接口管理平台

    2024-03-22 14:44:03       41 阅读
  8. opengl polygon 三角剖分

    2024-03-22 14:44:03       49 阅读
  9. 2024 蓝桥打卡Day18

    2024-03-22 14:44:03       44 阅读