首页 生活百科 美食推荐 汽车百科 星座运势 旅游攻略 数码科技 教育资讯 宠物知识 养花知识 健康知识 周公解梦 热门影视 消费指南
当前位置: 首页 > 生活百科 >

activity生命周期详解(Android进阶——Activity的生命周期)

100次浏览     发布时间:2024-09-16 08:04:32    


前言:本文主要介绍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 各种生命周期的切换过程。


图1-1


图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。
相关文章
县城小本生意做什么风险小(当下两个可以在小县城里养家糊口的小生意)
2024-09-17 10:33:41
概率怎么算公式是什么(彻底谈透条件概率,全概率和贝叶斯公式。)
2024-09-17 10:18:31
体脂秤的体脂率准确吗(体脂秤上的数字都代表了什么意思?)
2024-09-17 10:03:31
电池污染怎么解决(小小电池污染大!你处理正确了吗?)
2024-09-17 09:48:23
六部尚书是几品官(清代的六部中有哪些官员,分别都是几品、干什么的?)
2024-09-17 09:33:18
金色圣剑适合什么英雄(除了司空震和芈月,它还适合谁?)
2024-09-17 09:18:27