安卓 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)));
//    }
}
相关推荐
hmywillstronger26 分钟前
【Excel】【VBA】根据内容调整打印区域
android·excel
coooliang1 小时前
【Android】ViewPager的使用
android
xvch3 小时前
Kotlin 2.1.0 入门教程(二十五)类型擦除
android·kotlin
simplepeng12 小时前
我的天,我真是和androidx的字体加载杠上了
android
小猫猫猫◍˃ᵕ˂◍13 小时前
备忘录模式:快速恢复原始数据
android·java·备忘录模式
CYRUS_STUDIO15 小时前
使用 AndroidNativeEmu 调用 JNI 函数
android·逆向·汇编语言
梦否15 小时前
【Android】类加载器&热修复-随记
android
徒步青云15 小时前
Java内存模型
android
今阳15 小时前
鸿蒙开发笔记-6-装饰器之@Require装饰器,@Reusable装饰器
android·app·harmonyos
-优势在我20 小时前
Android TabLayout 实现随意控制item之间的间距
android·java·ui