安卓 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)));
//    }
}
相关推荐
橙子199110161 小时前
在 Kotlin 中,什么是解构,如何使用?
android·开发语言·kotlin
androidwork2 小时前
Android 中使用通知(Kotlin 版)
android·kotlin
Digitally3 小时前
如何从 Android 设备打印短信(5 种方法)
android
casual_clover3 小时前
Android 中 打开文件选择器(ACTION_OPEN_DOCUMENT )
android
_龙小鱼_5 小时前
卡顿检测与 Choreographer 原理
android·kotlin
云手机管家6 小时前
账号风控突破:云手机设备指纹篡改检测与反制技术解析
android·运维·网络协议·网络安全·智能手机·矩阵·自动化
千里马-horse6 小时前
Detected for tasks ‘compileDebugJavaWithJavac‘ (17) and ‘kspDebugKotlin‘ (21).
android·jdk·kspdebugkotlin
柯南二号8 小时前
【Android】Android 实现一个依赖注入的注解
android
archko10 小时前
语音识别-3,添加ai问答
android·人工智能
奔跑吧 android16 小时前
【android bluetooth 案例分析 03】【PTS 测试 】【PBAP/PCE/SGSIT/SERR/BV-01-C】
android·pts·aosp·pbap·sgsit