安卓中activity的生命周期_activity生命周期调用顺序

安卓中activity的生命周期_activity生命周期调用顺序Android开发—-Activity生命周期Activity作为四大组件之首,也是使用最频繁的一种组件。本文将主要讲解Activity生命周期,包括正常情况下的Activity生命周期和异常情况下的Activity生命周期。1.正常情况下的Activity生命周期所谓正常情况下的生命周期,是指有用户参与的情况下,Activity所经过的生命周期的改变。正常情况下,Activity会经历如下过程。…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Android开发—-Activity生命周期

Activity作为四大组件之首,也是使用最频繁的一种组件。本文将主要讲解Activity生命周期,包括正常情况下的Activity生命周期和异常情况下的Activity生命周期。

1. 正常情况下的Activity生命周期

所谓正常情况下的生命周期,是指有用户参与的情况下,Activity所经过的生命周期的改变。正常情况下,Activity会经历如下过程。
如图所示:
Activity生命周期的切换过程

(1)onCreate:表示Activity正在被创建,适合做一些初始化工作。实际应用中一般会初始化成员变量和加载布局资源。
(2)onRestrat:表示Activity正在被重新启动。一般是从不可见重新变为可见状态是调用。
(3)onStart:表示Activity正在被启动,即将开始,此时已经可见,但仍旧在后台,无法与用户交互,虽可见,但是我们还看不到。
(4)onResume:表示Activity已经可见了。此时Activity显示到前台。
(5)onPause:表示Activity正在停止,此时可以做一些存储数据、停止动画等操作,但不宜太耗时。因为此方法执行完,新的Activity的onResume才会执行。
(6)onStop:表示Activity即将停止,此时可以做一些回收工作,同样不能太耗时。
(7)onDestroy:表示Activity即将被销毁,此时可以做一些资源释放。

需要注意的是,如果新的Activity采用了透明主题,当前Activity便不会回调onStop。一般情况下是按照图中的顺序来的。onStart和onStop是从Activity可见与否这个角度来配对的,onResume和onPause是从Activity是否位于前台这个角度来配对的。

2. 异常情况下的Activity生命周期

所谓异常情况下的生命周期,是指Activity被系统回收或者当前设备Configuration改变导致的Activity被销毁重建。

一种典型的触发条件是横竖屏时,此时Activity就会被销毁并且重建。异常销毁时,onPause、onStop、onDestroy均会被调用,在onStop之前,系统会调用onSaveInstanceState来保存当前Activity的状态(Activity会委托Window,Window再委托给顶层容器DecorView去保存数据,最后顶层容器再一一通知其子View来保存数据)。
当重建时,系统会在onStart之后调用onRestoreInstanceState,销毁时onSaveInstanceState所保存的Bundle对象作为参数传给onRestoreInstanceState和onCreate,用于取出数据并恢复(Google建议我们采用前者去恢复数据)。

当然是有方法去阻止系统去重建Activity的,我们可以为Activity指定configChanges属性:
(1)比如我们不想在屏幕旋转时重建Activity,那么就可以指定android:configChanges=“orientation”。
(2)其中用的比较多的另两个属性为locale、keyboardHidden。前者为设备的本地位置发生了改变,一般指切换了系统语言。后者一般指用户调出了键盘。
(3)screenSize属性和smallestScreenSize属性比较特殊,他们是API13时添加的。分别表示的情况为屏幕尺寸发生变化和切换到外部显示设备时。若android:configChanges=“orientation|screenSize”,那么在min以及target均低于13时,不会导致重启,否则导致Activity重启。在不重建时,系统没有调用onSaveInstanceState以及onRestoreInstanceState方法,而是调用了onConfigurationChanged方法。
(4)Android4.2增加了一个layoutDirection属性,当改变语言设置后,该属性也会成newConfig中的一个mask位。所以ActivityManagerService(实际在ActivityStack)在决定是否重启Activity的时候总是判断为重启。需要在android:configChanges 中同时添加locale和layoutDirection。在不退出应用的情况下切换到Settings里切换语言,发现该Activity还是重启了。

3. Android为什么要设计一个生命周期呢

Google官方文档解释说,确保提供一个流畅的用户体验,在Activity切换时,以及你的Activity意外销毁的情况下,保存好Activity状态。

1.你正在编辑信息,这个时候跳出来一个透明提示框,Activity就进入了Paused状态,你想再次回到这个Activity时看到你编辑到一半的信息,就需要在onPause()回调方法中来执行这些操作。

2.当你按HOME键退出一个应用,或者从一个应用进入了另一个应用,这个时候之前那个Activity就变得完全不可见了,进入了Stopped状态,那么它就应该把它大多数的资源都释放出来了。所以这个时候,你就需要在onStop()回调方法中来执行这些操作。

3.当你接完一个电话,再次回到之前那个Activity,它就从Stopped状态变成了Resumed状态,这个时候你肯定希望它记录住了你离开时的状态,比如说编辑了一半的信息,正停留在新闻1/3的位置。那么这个时候,你就需要在onRestart()或者onStart()回调方法中来执行这些操作。

所以综上所述,之所以会设计出不同的生命周期状态,以及各状态间转换时的回调方法,就是为了适应用户使用过程中的不同场景,进而在特定的场景让Activity完成特定的事情,以此来确保提供一个流畅的用户体验。

4. Activity的生命周期是由谁控制的

ActivityManagerService是负责管理Activity的生命周期的。ActivityManagerService是一个非常重要的接口,它不但负责启动Activity和Service,还负责管理Activity和Service。
这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170688.html原文链接:https://javaforall.net

赞 (1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • LoadRunner11激活成功教程方法

    LoadRunner11激活成功教程方法LoadRunner11激活成功教程方法一、覆盖激活成功教程文件首先请下载LoadRunner激活成功教程文件,解压后将lm70.dll,mlr5lprg.dll覆盖LoadRunner11安装目录bin目录下的相应文件,我的目录是C:ProgramFiles\HPLoadRunner\bin,具体目录地址请根据自己安装路径来定。二、使用LoadRunner11序列号1.打开LoadRunner,点击co…

    2022年7月22日
  • 万能量产工具_u盘量产工具怎样使用

    万能量产工具_u盘量产工具怎样使用MPALLv3.23.00版本量产工具可以用来给16G金士顿U盘(PS2251-50)主控刷固件量产。当然也适合其他ps22XX主控的量产只是不用刷固件,一般是量产坏了或者量产不了才涉及到刷固件。做设置分区数量,制作u盘启动盘、低级格式化等不需要刷固件即可成功量产。包含固件为50的固件:BN50V313M-8K.BIN BN50V3122KM-2@4k.BIN FW50FF01

    2022年9月9日
  • 计算距离矩阵的方法_矩阵的欧式距离

    计算距离矩阵的方法_矩阵的欧式距离给定一个 N 行 M 列的 01 矩阵 A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为:dist(A[i][j],A[k][l])=|i−k|+|j−l|输出一个 N 行 M 列的整数矩阵 B,其中:B[i][j]=min1≤x≤N,1≤y≤M,A[x][y]=1dist(A[i][j],A[x][y])输入格式第一行两个整数 N,M。接下来一个 N 行 M 列的 01 矩阵,数字之间没有空格。输出格式一个 N 行 M 列的矩阵 B,相邻两个整数之间用一个空格隔开。数据范围

    2022年8月9日
  • python安装第三方库的方法_ios常用的第三方库

    python安装第三方库的方法_ios常用的第三方库在pyhton的学习中,相信大家通常都会碰到第三方库的安装问题,这个问题对于很多初学者而言头疼不已。这里我做一些简单的总结,如何正确高效地安装第三方库,少走弯路(毕竟都是我亲自踩过的坑,所以特地来总结一下,方便以后回顾和总结)!

    2022年10月14日
  • 微分是指什么_微分具体解释

    微分是指什么_微分具体解释微分的实际含义

    2022年8月4日
  • 推荐系统——LR模型「建议收藏」

    推荐系统——LR模型「建议收藏」LR模型是广义线性模型。LR模型(对数几率回归模型),虽然叫回归,但是其本质为分类。对数几率函数是一种sigmoid函数。线性模型有可解释性强、易于并行的优点。但是其难以表示非线性关系,所以模型的准确性可能不好。为了增强原始特征与拟合目标之间的非线性关系,通常需要对原始特征做一些非线性转换。常用的转换方法包括:连续特征离散化、特征之间的交叉等。离散化相当于把连续函数变成分段函数来增加非线性…

    2022年10月13日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号