Android 7.20-2 Activity的生命周期

本文详细介绍了Android中Activity的生命周期,包括返回栈的概念、Activity的四种状态(运行、暂停、停止、销毁)及其特点,以及七个关键回调方法。通过示例项目ActivityLifeCycleTest演示了如何在实践中跟踪和理解Activity的生命周期变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3. Activity的生命周期

3.1 返回栈

Android是使用任务(task)来管理Activity(ac)的,一个任务就是一组存放在栈里的ac的集合,这个栈也被称作返回栈,最新的ac总是在栈顶,当按Back键或调用finish()方法时,栈顶的ac会出栈,前一个入栈的ac就被顶到了栈顶。系统总是会显示处于栈顶的ac给用户。

3.2 Activity状态

每个ac在其生命周期中最多可能会有4种状态

  1. 运行状态

当ac处于栈顶时,它就处于运行状态。系统最不愿回收的就是处于运行状态的ac,因为这会带来非常差的用户体验,闪退就是极好的例子

  1. 暂停状态

当一个ac不再处于栈顶,却还可见时,就是暂停状态。因为不是所有的ac都能占满整个屏幕。

  1. 停止状态

当一个ac不再处于栈顶,又完全不可见的时候,就进入了停止状态,系统会为这种ac保存相应的状态和成员变量,但是如果其他地方需要内存时,处于停止状态的ac可能会被回收

  1. 销毁状态

一个ac从返回栈被移除后就变成了销毁状态。系统最倾向于回收这种状态下的ac,以确保内存充足。

3.3 Activity生存期

Ac类中定义了七个回调方法
onCreate()第一次创建,进行初始化操作,加载布局、绑定事件等
onStart()ac由不可见变为可见时
onResume()ac准备好与用户交互时
onPause()系统准备去启动或回复另一个ac时
onStop()ac完全不可见时,与前者的区别在于前者可能可见
onDestroy()ac被销毁之前
onRestart()ac由停止状态变为运行状态时

另外,ac的生存期被分为三种生存期:

  1. 完整生存期:创建到销毁 onCreate()->onDestroy()
  2. 可见生存期:从可见的一刻到完全不可见的一刻 onStart()->onStop()
  3. 前台生存期:从准备好交互到系统去启动另一个ac onResume()->onPause()

在这里插入图片描述

3.4 生命周期的demo

新建项目ActivityLifeCycleTest,New两个子ac,NormalActivity和DialogActivity,并分别在布局中写以下配置
在这里插入图片描述
只有text不同,然后去AndroidManifest.xml里修改dialogactivity的配置
在这里插入图片描述
通过theme属性设置主题为对话框式
接下来修改activity_main.xml
在这里插入图片描述
最后给按钮加点击事件,并重写六个回调方法

class MainActivity : AppCompatActivity() {

    private val tag = "MainActivity"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.d(tag, "onCreate")
        setContentView(R.layout.activity_main)
        startNormalActivity.setOnClickListener {
            val intent = Intent(this, NormalActivity::class.java)
            startActivity(intent)
        }
        startDialogActivity.setOnClickListener {
            val intent = Intent(this, DialogActivity::class.java)
            startActivity(intent)
        }
    }

    override fun onStart() {
        super.onStart()
        Log.d(tag, "onStart")
    }

    override fun onResume() {
        super.onResume()
        Log.d(tag, "onResume")
    }

    override fun onPause() {
        super.onPause()
        Log.d(tag, "onPause")
    }

    override fun onStop() {
        super.onStop()
        Log.d(tag, "onStop")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d(tag, "onDestroy")
    }

    override fun onRestart() {
        super.onRestart()
        Log.d(tag, "onRestart")
    }
}

运行:

  1. 观察打印日志

在这里插入图片描述

在这里插入图片描述
创建、启动、准备好交互

  1. 点击NormalActivity
    在这里插入图片描述

在这里插入图片描述

  1. 返回
    在这里插入图片描述

在这里插入图片描述

  1. 点击DialogActivity在这里插入图片描述

在这里插入图片描述

  1. 返回
    在这里插入图片描述

在这里插入图片描述

  1. 退出在这里插入图片描述

这样,一个完整的Activity的生命周期就走完了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值