安卓 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)));
//    }
}
相关推荐
selt7911 小时前
Redisson之RedissonLock源码完全解析
android·java·javascript
Yao_YongChao1 小时前
Android MVI处理副作用(Side Effect)
android·mvi·mvi副作用
非凡ghost2 小时前
JRiver Media Center(媒体管理软件)
android·学习·智能手机·媒体·软件需求
席卷全城2 小时前
Android 推箱子实现(引流文章)
android
齊家治國平天下3 小时前
Android 14 系统中 Tombstone 深度分析与解决指南
android·crash·系统服务·tombstone·android 14
maycho1235 小时前
MATLAB环境下基于双向长短时记忆网络的时间序列预测探索
android
思成不止于此5 小时前
【MySQL 零基础入门】MySQL 函数精讲(二):日期函数与流程控制函数篇
android·数据库·笔记·sql·学习·mysql
brave_zhao5 小时前
达梦数据库(DM8)支持全文索引功能,但并不直接兼容 MySQL 的 FULLTEXT 索引语法
android·adb
sheji34165 小时前
【开题答辩全过程】以 基于Android的网上订餐系统为例,包含答辩的问题和答案
android
闲人编程6 小时前
中间件开发与生命周期管理
缓存·中间件·生命周期·日志·扩展·codecapsule