安卓中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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 计算机网络协议详解怎么写_自考短线好还是长线好

    计算机网络协议详解怎么写_自考短线好还是长线好计算机网络协议详解:本篇文章主要总结一些常见的网络基础概念以及Linux系统中的网络相关设置方法,具体包括OSI七层协议、TCP/IP协议相关内容。

    2022年10月2日
    5
  • CURL

    CURL

    2021年7月31日
    56
  • 屏幕录制gif软件_手机录屏咋录内部声音

    屏幕录制gif软件_手机录屏咋录内部声音效果图如下:铜鼓录制屏幕的区域可以预览生成的GIF图片图片比较清晰源码中可以修改gif质量源码中可以修改gif帧数通过鼠标选择需要的区域FrmRectfrmRect=newFrmRect();frmRect.ShowDialog();m_rect=frmRect.Rect;label4.Text=”区域设定完成”;protec..

    2022年9月20日
    2
  • Centos系统安装图形界面

    Centos系统安装图形界面一、进入root模式二、安装X窗口系统yumgroupinstall”XWindowSystem”下载遇到选择时,选择y。三、检查一下我们已经安装的软件以及可以安装的软件yumgrouplist四、安装图形界面软件GNOMEyumgroupinstall”GNOMEDesktop””GraphicalAdministrationTools”五、通过命令startx进入图形界面,第一次进入会比较慢,请.

    2022年6月8日
    68
  • 像素密度计算

    像素密度计算为解决Android设备碎片化,引入一个概念density,也就是密度.它指的是在一定尺寸的物理屏幕上显示像素的数量,一般使用dpi(dotsperinch,每英寸像素数)作为单位.比如设备分辨率为240×320,屏幕物理尺寸为1.5英寸x2英寸(对角线为2.5),它的密度可以用分辨率/尺寸表示:240/1.5或者即320/2,密度为160dpi。算对角线也是一样的,长的平方+宽的平…

    2022年6月13日
    59
  • JAVA垃圾回收-可达性分析算法「建议收藏」

    在java中是通过引用来和对象进行关联的,也就是说如果要操作对象,必须通过引用来进行。那么很显然一个简单的办法就是通过引用计数来判断一个对象是否可以被回收。不失一般性,如果一个对象没有任何引用与之关联,则说明该对象基本不太可能在其他地方被使用到,那么这个对象就成为可被回收的对象了。这种方式成为引用计数法。这种方式的特点是实现简单,而且效率较高,但是它无法解决循环引用的问题,因此在Java中并没…

    2022年4月18日
    49

发表回复

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

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