activity销毁时执行执行方法是_Android进阶——Activity的生命周期

本文详述了Activity的生命周期,包括典型情况和异常情况下的变化。在典型情况下,Activity经历了onCreate、onRestart、onStart、onResume、onPause、onStop和onDestroy等阶段。在异常情况下,如配置改变或内存不足,系统会调用onSaveInstanceState和onRestoreInstanceState保存和恢复数据。配置android:configChanges可避免Activity因配置变化而重建。

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

前言:本文主要介绍Activity相关的一些内容。Activity作为四大组件之首,是使用最为频繁的一种组件。正常情况下,除了UWindow、Dialog 和 Toast,我们能见到的界面的确只有Activit。Activity是如此重要。

1 .1Activity的生命周期全面分析

本节将Activity的生命周期分为两部分内容,一部分是典型情况下的生命周期,另一部分是异常情况下的生命周期。

所谓典型情况下的生命周期,是指在有用户参与的情况下,Activity 所经过的生命周期的改变;

而异常情况下的生命周期,是指 Activity 被系统回收 或者 由于当前设备的 Configuration 发生改变从而导致 Activity 被销毁重建,异常情况下的生命周期的关注点和典型情况下略有不同。

1.1.1 典型情况下的生命周期分析

在正常情况下,Activity会经历如下生命周期。

  1. onCreate:表示 Activity 正在被创建,这是生命周期的第一个方法。在这个方法中, 我们可以做一些初始化工作,比如调用setContentView 去加载界面布局资源、初始化Activity 所需数据等。
  2. onRestart:表示 Activity 正在重新启动。一般情况下,当当前 Activity 从不可见重新变为可见状态时,onRestart 就会被调用。这种情形一般是用户行为所导致的,比如用户按 Home 键切换到桌面或者用户打开了一个新的 Activity,这是当前的 Activity 就会暂停,也就是 onPause 和 onStop 被执行了,接着用户又回到了这个 Activity,就会出现这种情况。
  3. onStart:表示 Activity 正在被启动,即将开始,这时 Activity 已经可见了,但是还没有出现在前台,还无法和用户交互。这个时候其实可以理解为 Activity 已经显示出来了,但是我们还看不到。
  4. onResume:表示 Activity已经可见了,并且出现在前台并开始活动。要注意这个和 onStart 的对比,onStart 和 onResume 都表示Activity已经可见,但是 onStart 的时候 Activity 还在后台,onResume 的时候 Activity 才显示到前台。
  5. onPause:表示 Activity 正在停止,正常情况下,紧接着 onStop 就会被调用。在特殊情况下,如果这个时候快速地再回到当前 Activity,那么 onResume 会被调用。笔者的理解是,这种情况属于极端情况,用户操作很难重现这一场景。此时可以做一些存储数据、 停止动画等工作,但是注意不能太耗时,因为这会影响到新 Activity 的显示,onPause 必须先执行完,新 Activity的 onResume 才会执行。
  6. onStop:表示 Activity 即将停止,可以做一些稍微重量级的回收工作,同样不能太耗时。
  7. onDestroy:表示 Activity 即将被销毁,这是 Activity 生命周期中的最后一个回调, 在这里,我们可以做一些回收工作和最终的资源释放。

正常情况下,Activity的常用生命周期就只有上面 7 个,图1-1,1-2会更详细地描述了 Activity 各种生命周期的切换过程。

e65d567f3f299591861c7e208558b1b7.png

图1-1

008b7a9cbf02a703c8a50e015ea05e73.png

图1-2

二、异常情况下生命周期

所谓的异常情况,通常指的是手机配置改变和因内存不足导致被系统回收。

  1. onSaveInstanceState 方法会在按Home键或者启动新 Activity 以及 Activity 被异常终止时触发调用。 Activity 被异常终止的情况下,它的调用时机是在 onStop 之前,它和 onPause 方法没有既定的时序关系。当 Activity 被重新创建的时候,onRestoreInstanceState 会被回调,它的调用时机是 onStart 之后。非异常终止时,不调用 onRestoreInstanceState。
    “系统只会在 Activity 即将被销毁并且有机会重新显示的情况下才会去调用 onSaveInstanceState 方法。”
  2. 调用 onSaveInstanceState 与 onRestoreInstanceState 来储存和恢复的数据,比如文本框中用户输入的数据、listview 滚动的位置等,这些 view 相关的状态系统都会默认为我们恢复。具体针对某一个 view 系统能为我们恢复哪些数据可以查看 view 的源码中的 onSaveInstanceState 和 onRestoreInstanceState 方法。
  3. android:configChanges=”xxx”属性,常用的主要有下面三个选项:local: 设备的本地位置发生了变化,一般指切换了系统语言;keyboardHidden: 键盘的可访问性发生了变化,比如用户调出了键盘;orientation: 屏幕方向发生了变化,比如旋转了手机屏幕。配置了 android:configChanges=”xxx”属性之后,Activity就不会在对应变化发生时重新创建,而是调用 Activity 的 onConfigurationChanged 方法。
  4. Activity 优先级(不易被回收程度):前台 Activity > 可见但非前台 Activity > 后台 Activity。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值