安卓 Android Activity 生命周期

文章目录

    • Intro
    • [生命周期方法 & 执行顺序结论](#生命周期方法 & 执行顺序结论)
    • code

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)));
//    }
}
相关推荐
饭小猿人2 小时前
Android 腾讯X5WebView如何禁止系统自带剪切板和自定义剪切板视图
android·java
_李小白3 小时前
【android opencv学习笔记】Day 8: remap(像素位置重映射)
android·opencv·学习
美狐美颜SDK开放平台3 小时前
多场景美颜SDK解决方案:直播APP(iOS/安卓)开发接入详解
android·人工智能·ios·音视频·美颜sdk·第三方美颜sdk·短视频美颜sdk
嗷o嗷o3 小时前
Android BLE 里,MTU、分包和长数据发送到底该怎么处理
android
Gary Studio5 小时前
Android AIDL HAL工程结构示例
android
y = xⁿ5 小时前
MySQL八股知识合集
android·mysql·adb
andr_gale6 小时前
04_rc文件语法规则
android·framework·aosp
祖国的好青年7 小时前
VS Code 搭建 React Native 开发环境(Windows 实战指南)
android·windows·react native·react.js
黄林晴7 小时前
警惕!AGP 9.2 别只改版本号,R8 规则与构建链路全线收紧
android·gradle